Heim > Web-Frontend > H5-Tutorial > Hauptteil

Zusammenfassung der Möglichkeiten zum Erzielen von Animationseffekten in HTML5 _HTML5-Tutorial-Fähigkeiten

WBOY
Freigeben: 2016-05-16 15:45:59
Original
1568 Leute haben es durchsucht

Der Editor verwendet ein fahrendes Auto, um drei Möglichkeiten zur Implementierung von HTML5-Animationen zu beschreiben. Die Ideen sind nicht nur Canvas, sondern auch CSS3 und Javascript.

PS: Aufgrund der Grafikkarte, des Aufnahmebildintervalls und möglicherweise Ihres Computerprozessors kann der Wiedergabevorgang etwas unruhig oder verzerrt sein!
Es kann auf drei Arten implementiert werden:
(1) Canvas-Element kombiniert mit JS
(2) Reine CSS3-Animation (nicht von allen Mainstream-Browsern wie IE unterstützt)
(3) CSS3 kombiniert mit Jquery
Zu wissen, wie man CSS3-Animationen verwendet, ist wichtiger als zu wissen, wie man das <canvas>-Element verwendet: weil der Browser die Leistung dieser Elemente (normalerweise ihrer Stile) optimieren kann , wie z. B. CSS), aber der Effekt, den wir zum Anpassen der Zeichnung mithilfe von Canvas verwenden, kann nicht optimiert werden. Der Grund liegt wiederum darin, dass die vom Browser verwendete Hardware hauptsächlich von den Fähigkeiten der Grafikkarte abhängt. Derzeit ermöglicht uns der Browser keinen direkten Zugriff auf die Grafikkarte. Beispielsweise muss jeder Zeichenvorgang zunächst bestimmte Funktionen im Browser aufrufen.
1.canvas
HTML-Code:

Code kopieren
Der Code lautet wie folgt:

Animation in HTML5 mit dem Canvas-Element
"1000" height="600">Ihr Browser unterstützt das <canvas>-Element nicht. Bitte denken Sie über ein Update Ihres Browsers nach! id=" steuert">




< ;/body> ;


js-Code:

Definieren Sie einige Variablen:


Code kopieren
Der Code ist wie folgt:

var dx=5, //Aktuelle Rate
rate=1, //Aktuelle Wiedergabegeschwindigkeitani, //Aktuelle Animationsschleifec, / /Drawing (Canvas-Kontext) w, //Auto [versteckt](Canvas-Kontext) grassHeight=130, //Hintergrundhöhe
carAlpha=0, //Reifendrehwinkel
carX=- 400 , //Die Position des Autos in Richtung der x-Achse (wird geändert)
carY=300, //Die Position des Autos in Richtung der y-Achse (bleibt konstant)
carWidth= 400, //Die Breite des Autos
carHeight=130, //Die Höhe des Autos
tiresDelta=15, //Der Abstand von einem Reifen zum nächstgelegenen Autochassis
axisDelta=20, / /Der Abstand zwischen der Achse des unteren Fahrgestells des Autos und dem Reifen
Radius=60; //Radius des Reifens



Um die Auto-Leinwand zu instanziieren (die zunächst ausgeblendet ist), verwenden wir die folgende selbstausführende anonyme Funktion





Code kopieren

Der Code lautet wie folgt:

(function(){
var car=document.createElement('canvas'); //Element erstellencar.height=carHeight axisDelta radius; //Höhe festlegen car.width=carWidth; //Breite festlegen w=car.getContext('2d'})(); > Klicken Sie auf die Schaltfläche „Wiedergabe“, um die Funktion „Bildwiedergabe“ zu simulieren, indem Sie in regelmäßigen Abständen wiederholt den Vorgang „Auto zeichnen“ ausführen:



Code kopieren


Der Code lautet wie folgt:
function play(s){ //Der Parameter s ist eine Schaltfläche

if(ani){ //If ani ist nicht null, es repräsentiert uns. Es gibt bereits eine Animation
clearInterval(ani); //also müssen wir sie löschen (die Animation stoppen)
s.innerHTML='Play' ; //Die Schaltfläche in „Play“ umbenennen

}else{
ani=setInterval(drawCanvas,40); //Wir werden die Animation auf 25fps [Bilder pro Sekunde], 40/1000, einstellen -twenty-fifth s.innerHTML='Pause'; // Benennen Sie die Schaltfläche in „Pause“ um } }
Beschleunigung und Verzögerung werden durch Ändern der Bewegungsdistanz mit den folgenden Methoden erreicht:





Kopieren Sie den Code


Der Code ist wie folgt:

function speed(delta){
var newRate=Math.max(rate delta,0.1);
dx=newRate/rate*dx;
}
Initialisierungsmethode zum Laden der Seite:
//init
function init(){
c=document.getElementById('canvas').getContext('2d'); ;
}


Hauptmethode:



Code kopieren Der Code lautet wie folgt:
function drawCanvas (){
c.clearRect(0,0,c.canvas.width, c.canvas.height); //Löschen Sie die Leinwand (angezeigt), um Fehler zu vermeiden
c.save(); / /Speichern Sie die aktuellen Koordinatenwerte und den Status, entsprechend ähnlichen „Push“-Vorgängen
drawGrass(); //Zeichnen Sie den Hintergrund
c.translate(carX,0); //Verschieben Sie die Startpunktkoordinaten
drawCar(); //Zeichne ein Auto (versteckte Leinwand)
c.drawImage(w.canvas,0,carY); //Zeichne das Auto, das schließlich angezeigt wird
c.restore(); /Stellen Sie den Zustand der Leinwand wieder her, entsprechend Es ähnelt der „Pop“-Operation
carX =dx; //Setzen Sie die Position des Autos in Richtung der X-Achse zurück, um das Vorwärtsgehen zu simulieren
carAlpha =dx/ radius; //Erhöhen Sie den Reifenwinkel proportional
if (carX>c.canvas.width){ //Legen Sie einige reguläre Randbedingungen fest
carX=-carWidth-10; //Sie können die Geschwindigkeit auch auf dx umkehren *=-1;
}
}


Hintergrund zeichnen:



Code kopieren Der Code lautet wie folgt:
Funktion drawGrass( ){
//Erstellen Sie einen linearen Farbverlauf. Die ersten beiden Parameter sind die Koordinaten des Farbverlaufs-Startpunkts und die letzten beiden Parameter sind die Koordinaten des Farbverlaufs-Endpunkts
var grad=c. createLinearGradient(0,c.canvas.height-grassHeight,0 ,c.canvas.height); Geben Sie die Verlaufsfarbe für den linearen Verlauf an, 0 stellt die Verlaufsanfangsfarbe dar, 1 stellt die Verlaufsendfarbe dar
grad.addColorStop(0,'#33CC00');
grad.addColorStop(1,'#66FF22');
c.lineWidth=0; .fillRect(0,c.canvas.height-grassHeight,c.canvas .width,grassHeight);
Zeichnen Sie die Karosserie:





Kopieren Sie den Code

Der Code lautet wie folgt:

function drawCar( ){
w.clearRect(0,0,w.canvas.width,w.canvas.height); //Löschen Sie die ausgeblendete Zeichenflächew.StrokeStyle='#FF6600'; //Legen Sie die Randfarbe festw.lineWidth=2; //Legen Sie die Breite des Randes in Pixel festw.fillStyle='#FF9900';/Legen Sie die Füllfarbe festw.beginPath( ); // Beginnen Sie mit dem Zeichnen eines neuen Pfads
w.rect(0,0,carWidth,carHeight); //Zeichnen Sie ein Rechteck
w.Stroke(); //Zeichnen Sie einen Rand
w.fill (); //Füllen Sie den Hintergrund
w.closePath(); //Schließen Sie den neu gezeichneten Pfad
drawTire(tiresDelta radius,carHeight axisDelta); //Wir beginnen mit dem Zeichnen des ersten Rades
drawTire(carWidth -tiresDelta-radius,carHeight axisDelta); / /In ähnlicher Weise die zweite
}



Reifen zeichnen:





Code kopieren

Der Code lautet wie folgt:

function drawTire( x,y){
w.save(); w.translate(x,y); w.strokeStyle='#3300FF' ; w.lineWidth=1; w.fillStyle='#0099FF';
w.arc(0,0,radius,0,2*Math. PI,false);
w.fill();
w.beginPath();
w.lineTo (-radius ,0);
w.closePath();
w.moveTo(0,radius); .lineTo( 0,-radius);
w.closePath();
w.restore(}



Da das Prinzip einfach ist und detaillierte Kommentare im Code enthalten sind, werde ich sie hier nicht einzeln erklären!


2.CSS3


Sie werden sehen, dass wir ohne einen einzigen JS-Code vollständig den gleichen Animationseffekt wie oben erreicht haben:

HTML-Code:






Kopieren Sie den Code

Der Code lautet wie folgt:





Fahrgestell">



< div class="vr">

>


grass">





CSS-Code :
body
{
padding:0;
margin:0;



Definieren Sie die Animation der Karosserie- und Reifenrotation (Sie werden sehen, dass grundsätzlich jede Animation vier Definitionsversionen hat: native version/webkit[Chrome|Safari]/ms[für Abwärtskompatibilität mit IE10]/moz[FireFox 】)





Kopieren Sie den Code
Der Code lautet wie folgt:


/*Animation definieren: von der -400px-Position zur 1600px-Position verschieben*/
@keyframes carAnimation
{
0% { left:-400px } /* Geben Sie die Anfangsposition an, 0 % entspricht from*/
100 % { left:1600px } /* Gibt die endgültige Position an, 100 % entspricht to*/
}
/* Safari und Chrome */
@ -webkit-keyframes carAnimation
{
0% {left:-400px }
100% {left:1600px }
}
/* Firefox */
@ -moz -keyframes carAnimation
{
0% {left:-400; }
100% {left:1600px; }
/*IE unterstützt dies noch nicht ist für Back kompatibel mit IE10*/
@-ms-keyframes carAnimation
{
0% {left:-400px; }
100%{left:1600px; }
} @keyframes tyreAnimation
{
0% {transform: rotieren(0); }
100% {transform: rotieren(1800deg); }
}
@-webkit-keyframes tyreAnimation
{ 0 % {
0% { -moz-transform: rotieren(0); }
100% { -moz-transform: rotieren(1800deg); }
}
@-ms-keyframes tyreAnimation
{
0% { -ms-transform: rotieren(0); }
100% { -ms-transform: rotieren(1800deg); }
} #container
{
position :relative;
width:100%;
overflow:hidden; /*Das ist sehr wichtig*/
#car
{
position :absolute; / *Das Auto ist absolut im Container positioniert*/
width:400px
height:210px; /*Die Gesamthöhe des Autos, einschließlich Reifen und Chassis*/
z-index :1; /*Das Auto über dem Hintergrund lassen*/
oben:300px; /*Abstand von oben (y-Achse)*/
links:50px; /
/* Der folgende Inhalt gibt dem Element vordefinierte Animationen und zugehörige Attribute an*/
-webkit-animation-name:carAnimation*/
-webkit-animation-duration:10s /* Dauer*/
-webkit-animation-iteration-count:infinite; /*Anzahl der Iterationen-infinite*/
-webkit-animation-timing-function:linear; /*Animation von Anfang an mit der gleichen Geschwindigkeit abspielen bis zum Ende* /
-moz-animation-name:carAnimation; /*name*/
-moz-animation-duration:10s; /*duration*/
-moz-animation-iteration-count: unendlich; /*Anzahl der Iterationen – unbegrenzt*/
-moz-animation-timing-function:linear; /*Animation von Anfang bis Ende mit der gleichen Geschwindigkeit abspielen*/
-ms-animation-name:carAnimation ; /*Name*/
-ms-animation-duration:10s; /*Duration*/
-ms-animation-iteration-count:infinite; /*Anzahl der Iterationen-infinite*/
- ms-animation-timing-function:linear; /*Animation von Anfang bis Ende mit der gleichen Geschwindigkeit abspielen*/
animation-name:carAnimation; /*Name*/
animation-duration:10s; /* Dauer */
animation-iteration-count:infinite; /*Anzahl der Iterationen-infinite*/
animation-timing-function:linear; /*Animation von Anfang bis Ende mit der gleichen Geschwindigkeit abspielen*/
}
/*body*/
#chassis
{
position:absolute;
width:400px;
background:#FF9900; border: 2px solid #FF6600; der Hintergrund oben*/
bottom:0;
border-radius:60px; /*circle radius*/
height:120px;
width:120px; /* 2*radius=width */
background:#0099FF; /*fill color*/
border:1px solid #3300FF
-webkit-animation-name: tyreAnimation ;
-webkit-animation-duration:10s; name :tyreAnimation;
-moz-animation-duration:10s; Animation -name:tyreAnimation;
-ms-animation-duration:10s;
-ms-animation-timing-function:linear; - name:tyreAnimation;
animation-duration:10s;
animation-time-function:linear;
#fronttire
{
right:20px; /*Setzt den Abstand zwischen dem rechten Reifen und der Kante auf 20*/
}
#backtire
{
left:20px; /*Setzt den Abstand zwischen dem linken Reifen und Rand auf 20*/
}
#grass
{
position:absolute; /*Der Hintergrund ist absolut im Container positioniert*/
width:100%; >height:130px;
bottom:0;
/*Lassen Sie die Hintergrundfarbe linear verlaufen, unten stellt der Startpunkt des Farbverlaufs dar, der erste Farbwert ist der Startwert des Farbverlaufs, der zweite Farbwert ist der Endwert*/
background:linear-grdaient(bottom,#33CC00,#66FF22);
background:-webkit-linear-gradient(bottom,#33CC00,#66FF22); -moz-linear-gradient(bottom, #33CC00,#66FF22);
background:-ms-linear-gradient(bottom,#33CC00,#66FF22);
.hr,.vr
{
position:absolute ;
background:#3300FF;
.hr
{
height:100%; /*horizontale Linie des Reifens*/
left:0 ;
top:60px
}
.vr
{
width:1px
height:100%; /*Vertikale Reifenlinie*/
top:0; >


3.JQuery und CSS3

Dies ist eine Methode mit guter Wirkung und Kompatibilität (insbesondere, da IE9 CSS3 noch nicht unterstützt) HTML-Code (Sie können Achten Sie darauf, dass es sich nicht vom HTML-Code in CSS3 unterscheidet):


Kopieren Sie den Code

Der Code lautet wie folgt: /title> id="chassis">
>< div class="vr">
"hr" >

id="grass"
>CSS: