Ein Grundgerüst für eine Canvas-Animation
Mit Canvas kann man nicht nur statische Grafiken erstellen. Es ist auch möglich, eine Canvas-Grafik kontinuierlich zu verändern. Man spricht dann in der Regel von einer Animation. Solche Animationen werden in der Regel über einen rekursiven Funktionsaufruf erzeugt, d.h. eine Funktion die sich selbst aufruft.
Dieses Code-Beispiel verdeutlicht den Ablauf einer Animation. Im Beispiel wird ein Rechteck kontinuierlich über einen gefüllten Hintergrund bewegt. Die rekursive Funktion in diesem Beispiel ist animate(context, breite, hoehe, ax, ay, adx, ady)
.
<script type="text/javascript"> // Die Canvas-Funktion beim Laden der Seite aufrufen if(window.addEventListener){ addEventListener("load", zeichne, false); } //Canvas zeichnen function zeichne(){ var myCanvas = document.getElementsByTagName('canvas')[0]; if(myCanvas.getContext){ var context = myCanvas.getContext('2d'); //Stil fuer die Füllung festlegen context.fillStyle = "rgb(255, 0, 255)"; //Gesamte Canvasflaeche fuellen context.fillRect(0, 0, myCanvas.width, myCanvas.height); //Erstaufruf der Animation mit Startparamtern aufrufen animate(context, myCanvas.width, myCanvas.height, 31, 69, 1, -1); } }
//Animieren im Canvas mit BreitexHoehe, Position x,y, Schrittweite x,y function animate(context, breite, hoehe, ax, ay, adx, ady){ setTimeout(function(){ //Bewegen und Abprallen des Quadrates if(ax == breite-50){ adx = -1; } else{ if(ax == 0){ adx = 1; } } if(ay == hoehe-50){ ady = -1; } else{ if(ay == 0){ ady = 1; } } ax = ax+adx; ay = ay+ady; // Alles löschen context.clearRect(0, 0, breite, hoehe); context.fillStyle = "rgb(255, 0, 255)"; context.fillRect(0, 0, breite, hoehe); context.fillStyle = "rgba(0, 0, 255, 0.5)"; context.fillRect(ax, ay, 50, 50); // rekursiver Aufruf der Funktion self.animate(context, breite, hoehe, ax, ay, adx, ady); }, 20);//Geschwindigkeit 0-schnell,100 sehr langsam } </script>