Funkcja requestAnimationFrame()
Listing
window.requestAnimFrame = (function(callback) { return window.requestAnimationFrame || window.webkitRequestAnimationFrame || window.mozRequestAnimationFrame || window.oRequestAnimationFrame || window.msRequestAnimationFrame || function(callback) { window.setTimeout(callback, 1000 / 42); }; })(); function drawRectangle(rectangle, context) { context.beginPath(); context.rect(rectangle.x, rectangle.y, rectangle.width, rectangle.height); context.fillStyle = 'red'; context.fill(); context.lineWidth = rectangle.borderWidth; context.strokeStyle = 'black'; context.stroke(); }; function animate(rectangle, canvas, context, startTime) { var time = (new Date()).getTime() - startTime; var linearSpeed = 100; var newX = linearSpeed * time / 1000; if (newX < canvas.width - rectangle.width - rectangle.borderWidth / 2) { rectangle.x = newX; } context.clearRect(0, 0, canvas.width, canvas.height); drawRectangle(rectangle, context); requestAnimFrame(function() { animate(rectangle, canvas, context, startTime); }); }; var cv = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); var rectangle = { x : 0, y : 75, width : 100, height : 50, borderWidth : 2 }; drawRectangle(rectangle, ctx); setTimeout(function() { var startTime = (new Date()).getTime(); animate(rectangle, cv, ctx, startTime); }, 500);
inne animacje wykorzystujące tę funkcję: