Canvas 动画制作

在前面的两篇文章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方法实例操作

<!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动画制作实例

<!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>

效果图

原文发布于微信公众号 - HTML5学堂(h5course-com)

原文发表时间:2015-08-25

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏前端知识分享

第165天:canvas绘制圆环旋转动画

693
来自专栏柠檬先生

Reactjs 入门基础(三)

State 和 Props 以下实例演示了如何在应用中组合使用 state 和 props 。我们可以在父组件中设置 state, 并通过在子组件上使用 pro...

1859
来自专栏前端儿

简单的鼠标可拖动DIV 兼容IE/FF

一个div,注册监听onmousedown事件,然后处理获取的对象及其相关值(对象高度,clientX/clientY位置等)

501
来自专栏青玉伏案

web前端基础知识总结

上个寒假总结的web前端的一些知识点给大家分享一下 1、<html>和</html> 标签限定了文档的开始和结束点。 属性: (1)  dir: 文本的显示方向...

1785
来自专栏九彩拼盘的叨叨叨

jQuery 最佳实践(译)

原文 http://shichuan.github.io/javascript-patterns/#jquery-patterns

443
来自专栏大内老A

一句代码实现批量数据绑定[上篇]

对于一个以数据处理为主的应用中的UI层,我们往往需要编写相当多的代码去实现数据绑定。如果界面上的控件和作为数据源的实体类型之间存储某种约定的映射关系,我们就可以...

1846
来自专栏python3

tkinter -- Scrollbar

Scrollbar(滚动条),可以单独使用,但最多的还是与其它控件(Listbox,Text,Canva 等)结合使用

412
来自专栏林德熙的博客

win10 uwp 渲染原理 DirectComposition 渲染 例子创建工程如何写显示CompositionSurfaceBrush

本文来告诉大家一个新的技术DirectComposition,在 win7 之后(实际上是 vista),微软正在考虑一个新的渲染机制。

191
来自专栏企鹅号快讯

HTML5&CSS3初学者指南(4)–Canvas使用

问题:我怎么才能收到你们公众号平台的推送文章呢? 介绍 传统的HTML主要用于文本的创建,可以通过标签插入图像,动画的实现则需要第三方插件。在这方面,传统的HT...

1798
来自专栏葡萄城控件技术团队

HTML5 & CSS3初学者指南(4) – Canvas使用

介绍 传统的HTML主要用于文本的创建,可以通过<img>标签插入图像,动画的实现则需要第三方插件。在这方面,传统的HTML极其缺乏满足现代网页多媒体需求的能力...

1816

扫描关注云+社区