前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Canvas 动画制作

Canvas 动画制作

作者头像
HTML5学堂
发布2018-03-12 11:34:05
2K0
发布2018-03-12 11:34:05
举报
文章被收录于专栏:HTML5学堂HTML5学堂

在前面的两篇文章Canvas 基本绘制(下)Canvas 基本绘制(上)中,介绍了Canvas的基本绘制。学过SVG的童鞋应该知道它是可以制作动画,那么Canvas是否能制作动画呢?答案是肯定的。所以今天我们就给大家来介绍一下Canvas制作动画。

Canvas动画制作原理

简单一句话概括:不断的绘制与清除。

Canvas实现动画步骤(不断循环)

1、更新绘制的对象(比如位置的移动)

2、清除画布

3、在画布上重新绘制对象

Canvas 动画相关命令

clearRect方法

context.clearRect(x,y,width,height);方法清空给定矩形内的指定像素。

save与restore方法

所有的 2D 绘图上下文属性都是可保存和恢复的属性,但绘制的内容可不是,也就是说你恢复了绘图上下文,并不会恢复其所绘制的图形。

用来保存Canvas的状态(类似数组的入栈操作)。

用来恢复Canvas之前保存的状态(类似数组的出栈操作)。

这种状态包括:strokeStyle, fillStyle, lineWidth, lineCap, shadowOffsetX, shadowOffsetY, shadowBlur, shadowColor, font, textAlign, textBaseline。

save与restore方法实例操作

代码语言:javascript
复制
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>HTML5学堂</title>
    <link rel="stylesheet" href="../css/reset.css">
    <script src="../js/jquery-1.8.3.min.js" charset="utf-8" type="text/javascript"></script>
    <style>
        .draw {
            margin: 30px 20px;
            border: 1px solid red;
        }
    </style>
</head>
<body>
    <canvas id="testCanvas" width="1000" height="500" class="draw"></canvas>
    <script>
        var testCanvas = document.getElementById("testCanvas");
        // 获取getContext()对象
        var context = testCanvas.getContext("2d");
 
        context.fillStyle = "red";
        context.fillRect(10, 10, 150, 150);
        // 保存状态(红色)
        context.save();
 
        context.fillStyle="green";
        context.fillRect(150, 150, 170, 170);
        // 保存状态(绿色)
        context.save();
 
        // 恢复状态(红色)
        context.restore();
        context.fillRect(250, 250, 170, 170);
 
        // 恢复状态(绿色)
        context.restore();
        context.fillRect(380, 380, 170, 170);
        context.beginPath();
    </script>
</body>
</html>

效果图

Canvas动画制作实例

代码语言:javascript
复制
<!doctype html>
<html>
<head>
    <meta charset="UTF-8">
    <title>HTML5学堂</title>
    <link rel="stylesheet" href="../css/reset.css">
    <script src="../js/jquery-1.8.3.min.js" charset="utf-8" type="text/javascript"></script>
    <style>
        .wrap {
            width: 1024px;
            height: 800px;
            margin: 0 auto;            
        }
        .wrap canvas {
            border: 1px solid #999;
        }
    </style>
</head>
<body>
    <div class="wrap">
        <canvas width="1024" height="600">
            您的浏览器不支持canvas!
        </canvas>    
    </div>
    <script>
        var testCanvas = $("canvas")[0];
        var context = testCanvas.getContext("2d");
        var x = 0;
        var y = 0;
        var timer = null;
 
        // 思路:进行清画布 再次绘制(循环操作)
 
        /*
         * 功能:Canvas动画绘制
         * author:HTML5学堂、刘国利、陈能堡
         *
         */
        function draw(){
            // 不断改变绘制对象的水平位置
            x++;
            // 清除画布
            context.clearRect(0, 0, 1024, 600);
            context.beginPath();
            context.fillStyle = "red";
            context.arc(x, 150, 100, 0, 2 * Math.PI, true);
            context.closePath();
            // 绘制轮廓
            context.stroke();
            // 填充颜色
            context.fill();
        }
 
        // 设置计时器
        setInterval(draw, 20);
    </script>
</body>
</html>

效果图

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2015-08-25,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 懂点君 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档