创建动画

 

概述

配合使用JavaScript中提供的requestAnimationFrame方法,可以很容易的在canvas中实现动画效果

一般来说,需要按照下面的步骤来创建动画:

1. 清空canvas:使用clearRect方法,清空区域。
2. 保存canvas状态:如果你要改变一些会改变canvas状态的设置(样式,变形之类的),又要在每画一帧之时都是原始状态的话,你需要先保存一下。
3. 绘制动画图形(animated shapes)
4. 恢复canvas状态

代码示例

GridFunny定义与Canvas概述一节中一致

window.requestAnimFrame = (function() {
    return window.requestAnimationFrame ||
        window.webkitRequestAnimationFrame ||
        window.mozRequestAnimationFrame ||
        window.oRequestAnimationFrame ||
        window.msRequestAnimationFrame ||
        function( /* function */ callback, /* DOMElement */ element) {
            window.setTimeout(callback, 1000 / 60);
        };
})();

var grid = new GridFunny({
    nextDraw: function() {
        var time = new Date().getTime() * 0.002,
            num = this.settings.gridNum,
            canvasSize = this.settings.canvasSize,
            cX = canvasSize.width / 2,
            cY = canvasSize.height / 2,
            x = Math.sin(time) * this.pixelX + cX,
            y = Math.cos(time * 0.9) * this.pixelY + cY,
            gradient = this.context.createRadialGradient(x, y, 20, cX, cY, 110);
        gradient.addColorStop(0, 'yellow');
        gradient.addColorStop(1, 'green');
        this.context.fillStyle = gradient;
        this.context.beginPath();
        this.context.arc(cX, cY, 110, 0, 2 * Math.PI, false);
        this.context.fill();
        this.context.closePath();
    }
});
grid.start();
var animate = function() {
    requestAnimationFrame(animate);
    grid._drawBoard();
};
animate();

代码的执行效果如下: