H5最强接口之canvas实现动态图形功能


Posted in HTML / CSS onMay 31, 2019

上个文章中我们分享了如何利用canvas来进行图形绘制,但是绘制的都是静态图形,本周我们就来学习如何利用canvas进行动态图形绘制。

什么是动画?

我们在绘制动画之前必须要弄清楚什么是动画,一个动画最起码需要哪些基本条件呢?

我们可以用一个工具展示动画是什么?

这是利用PPT绘制出的一个动画效果

H5最强接口之canvas实现动态图形功能

根据以上PPT绘制出的一个动画效果我们可以看到,快速在几张PPT页面进行切换时连起来看到的就是一个动画效果。

这就是动画实现的基本要素:

单位时间内连续播放多张图片。这个单位时间一般以秒为单位,在计算机渲染的图形中要想获得一个足够流畅的视频,每秒钟内的图片数量必须要大于等于显示器的刷新频率(这个刷新频率一般为60hz)

每图片内的物体状态(大小,形状,颜色,位置,角度等等)必须要发生改变

那么我们在canvas中如何实现这两个条件呢?

如何在1s内绘制60张图形

我们可以把这话变形一下,就变成每隔1/60s就绘制一张图形。在JavaScript中要想实现每隔一段时间做一件事情,我们使用的方法是用定时器setinterval。

什么是定时器?

setinerval(function f(){},t),定时器内部可以传入两个参数,一个是函数,一个是时间,这个代码的意思就是每隔t ms就执行一次函数f。

那么我们就用这个来实现我们所需要的每隔1/60s绘制一张图形

setInterval(function(){
canCon.fillStyle="black";
//canCon.fill的意思在这张宣纸上拿起一只画实心图形的笔,
//style="black"的意思就是蘸上一个黑色墨
//连起来看的话就是拿起一只画实心图形的笔并粘上有黑色的墨水
canCon.arc(233,233,66,0,Math.PI*2);
 //在宣纸上构思画一个圆(圆心的X位置,Y位置,圆的半径,从什么位置开始画圆,画到哪里结束);
canCon.fill();//下笔作画
},1000/60)

最终效果

H5最强接口之canvas实现动态图形功能

但是现在还没有一个动画效果,因为1s内绘制的60张图形都是一模一样的,所以接下来就要在每一张图形绘制的时候改变元素的状态。

顺便给大家推荐一个裙,它的前面是 537,中间是631,最后就是 707。想要学习前端的小伙伴可以加入我们一起学习,互相帮助。群里每天晚上都有大神免费直播上课,如果不是想学习的小伙伴就不要加啦。

(537-631-707)

如何改变元素的状态?

一个圆的位置是由圆心的坐标决定的,那么我们在每次绘制canvas的时候就改变一次元素的位置即可

vary=100;//给一个初始的圆心位置,接下来每次绘制的时候圆心的y位置都往下移动一个距离
setInterval(function(){
canCon.fillStyle="black";
//canCon.fill的意思在这张宣纸上拿起一只画实心图形的笔,
//style="black"的意思就是蘸上一个黑色墨
//连起来看的话就是拿起一只画实心图形的笔并粘上有黑色的墨水
canCon.arc(233,y++,66,0,Math.PI*2);
//在宣纸上构思画一个圆(圆心的X位置,Y位置,圆的半径,从什么位置开始画圆,画到哪里结束);
canCon.fill();//下笔作画
},1000/60)

H5最强接口之canvas实现动态图形功能

此时我们看到的不是一个运动的圆,更像是一个不断延伸的进度条。原因其实很简单,咱们在每次绘制一个新的图形的时候没有把原来的图形给擦出掉了,这样的画面就是n多图形叠加在一起的结果了。所以我们每次在绘制新的图形的时候就要把原来的给擦除掉,那么如何做到呢?

vary=100;//给一个初始的圆心位置,接下来每次绘制的时候圆心的y位置都往下移动一个距离
setInterval(function(){
canCon.clearRect(0,0,500,500);//擦除一个矩形区域 矩形的左上角坐标和矩形的宽高
canCon.fillStyle="black";
//canCon.fill的意思在这张宣纸上拿起一只画实心图形的笔,
//style="black"的意思就是蘸上一个黑色墨
//连起来看的话就是拿起一只画实心图形的笔并粘上有黑色的墨水
canCon.arc(233,y++,66,0,Math.PI*2);
//在宣纸上构思画一个圆(圆心的X位置,Y位置,圆的半径,从什么位置开始画圆,画到哪里结束);
canCon.fill();//下笔作画
},1000/60)

但此时还是没有效果,那么到底是什么情况呢?我们可以回想一下我们小时候画画的场景,我们在擦除画纸上某一区域的时候是不是需要首先把画笔抬起来,这样的话我们才能用橡皮擦擦掉纸上的某些区域,所以我们在擦除canvas的某个区域之前先要把笔给抬起来才行。

vary=100;//给一个初始的圆心位置,接下来每次绘制的时候圆心的y位置都往下移动一个距离
setInterval(function(){
canCon.beginPath();//把笔抬起来
canCon.clearRect(0,0,500,500);//擦除一个矩形区域 矩形的左上角坐标和矩形的宽高
canCon.fillStyle="black";
//canCon.fill的意思在这张宣纸上拿起一只画实心图形的笔,
//style="black"的意思就是蘸上一个黑色墨
//连起来看的话就是拿起一只画实心图形的笔并粘上有黑色的墨水
canCon.arc(233,y++,66,0,Math.PI*2);
 //在宣纸上构思画一个圆(圆心的X位置,Y位置,圆的半径,从什么位置开始画圆,画到哪里结束);
canCon.fill();//下笔作画
},1000/60)

这样我们就能得到一个运动的圆了

H5最强接口之canvas实现动态图形功能

总结

以上所述是小编给大家介绍的H5最强接口之canvas实现动态图形功能 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
 

HTML / CSS 相关文章推荐
CSS3 @font-face属性使用指南
Dec 12 HTML / CSS
基于Jquery和Css3代码制作可以缩放的搜索框
Nov 19 HTML / CSS
html5 Canvas绘制线条 closePath()实例代码
May 10 HTML / CSS
html5 Canvas画图教程(4)—未闭合的路径及渐变色的填充方法
Jan 09 HTML / CSS
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
Jan 30 HTML / CSS
html5实现完美兼容各大浏览器的播放器
Dec 26 HTML / CSS
解决canvas转base64/jpeg时透明区域变成黑色背景的方法
Oct 23 HTML / CSS
phonegap常用事件总结(必看篇)
Mar 31 HTML / CSS
HTML5实现直播间评论滚动效果的代码
May 27 HTML / CSS
HTML5中在title标题标签里设置小图标的方法
Jun 23 HTML / CSS
html5关于外链嵌入页面通信问题(postMessage解决跨域通信)
Jul 20 HTML / CSS
HTML中的表单元素介绍
Feb 28 HTML / CSS
如何在Canvas中添加事件的方法示例
May 21 #HTML / CSS
HTML5新增form控件和表单属性实例代码详解
May 15 #HTML / CSS
Html5 滚动穿透的方法
May 13 #HTML / CSS
JavaScript+Canvas实现自定义画板的示例代码
May 13 #HTML / CSS
使用html5实现表格实现标题合并的实例代码
May 13 #HTML / CSS
基于Html5实现的语音搜索功能
May 13 #HTML / CSS
怎样实现H5+CSS3手指滑动切换图片的示例代码
May 05 #HTML / CSS
You might like
PHP中调用ASP.NET的WebService的代码
2011/04/22 PHP
openPNE常用方法分享
2011/11/29 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
php生成复杂验证码(倾斜,正弦干扰线,黏贴,旋转)
2018/03/12 PHP
关于laravel5.5的定时任务详解(demo)
2019/10/23 PHP
jQuery 页面载入进度条实现代码
2009/02/08 Javascript
JS中动态添加事件(绑定事件)的代码
2011/01/09 Javascript
JS的replace方法详细介绍
2012/11/09 Javascript
Javascript:为input设置readOnly属性(示例讲解)
2013/12/25 Javascript
实现placeholder效果的方案汇总
2015/06/11 Javascript
Bootstrap每天必学之工具提示(Tooltip)插件
2016/04/26 Javascript
浅析如何利用angular结合translate为项目实现国际化
2016/12/08 Javascript
js实现点击按钮弹出上传文件的窗口
2016/12/23 Javascript
深入理解Javascript中的作用域链和闭包
2017/04/25 Javascript
微信页面弹出键盘后iframe内容变空白的解决方案
2017/09/20 Javascript
详解weex默认webpack.config.js改造
2018/01/08 Javascript
javascript中floor使用方法总结
2019/02/02 Javascript
rabbitmq(中间消息代理)在python中的使用详解
2017/12/14 Python
对python打乱数据集中X,y标签对的方法详解
2018/12/14 Python
Python面向对象程序设计之私有属性及私有方法示例
2019/04/08 Python
Python企业编码生成系统之系统主要函数设计详解
2019/07/26 Python
讲解Python3中NumPy数组寻找特定元素下标的两种方法
2019/08/04 Python
解决python有时候import不了当前的包问题
2019/08/28 Python
详解Python3迁移接口变化采坑记
2019/10/11 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
Python Django form 组件动态从数据库取choices数据实例
2020/05/19 Python
基于PyTorch的permute和reshape/view的区别介绍
2020/06/18 Python
html5指南-5.使用web storage存储键值对的数据
2013/01/07 HTML / CSS
很酷的小工具和电子产品商城:GearBest
2016/11/19 全球购物
雅诗兰黛澳大利亚官网:Estée Lauder澳大利亚
2019/05/31 全球购物
小学数学国培感言
2014/03/10 职场文书
团日活动总结模板
2014/06/25 职场文书
写给孩子的新学期寄语
2015/02/27 职场文书
观后感格式
2015/06/19 职场文书
青年干部培训班学习心得体会
2016/01/06 职场文书
js实现模拟购物商城案例
2021/05/18 Javascript