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

什么是动画?

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

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

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

根据以上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)

最终效果

但是现在还没有一个动画效果,因为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)

此时我们看到的不是一个运动的圆,更像是一个不断延伸的进度条。原因其实很简单,咱们在每次绘制一个新的图形的时候没有把原来的图形给擦出掉了,这样的画面就是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实现动态图形功能 ,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

html根据坐标动态生成图形,H5最强接口之canvas实现动态图形功能相关推荐

  1. 动态生成的html元素无法调用js函数,如何确保动态生成的div在js函数被调用之前被加载到DOM中?...

    $("#submitB").click(function() { $.post("/previewproposal", $("#proposal-fo ...

  2. html动态生成按钮事件无效,【iCheck】通过 JS 动态生成的元素点击无效的解决方法...

    HTML Sample JS$('input').iCheck({ checkboxClass: 'checkbox-default', radioClass: 'radio-default' }); ...

  3. 动态生成布局html,HTML5应用开发:神奇的动态布局库isotope教程

    目录 1. isotope介绍 2. 简单的isotope例子 3. Sorting & Filtering 4. 动态添加元素 5. 神奇的布局机制 6. 标记#Hash历史记录 1. is ...

  4. 给动态生成的id标签添加html,比较好玩的动态添加网页元素

    比较好玩的动态添加网页元素 javascript 有一些很有趣的功能.下面介绍三样小功能. 1.动态创建按键 2动态创建链接 3动态创建表格 效果如下: 源代码如下: function btnClic ...

  5. 使用POI在Excel中动态生成图表工具类(支持柱状、组合、环状图、折线图、等常用图)

    使用POI在Excel中动态生成图表工具类 使用POI在Excel中动态生成图表工具类 由于公司是一个生成报表的机构,之前一直使用pageOffice,但是公司领导就是不买,你说公司那样有钱磨磨唧唧干 ...

  6. MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航

    MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航 原文:MVC 5 + EF6 入门完整教程14 -- 动态生成面包屑导航 上篇文章我们完成了 动态生成多级菜单 这个实用组件. 本篇 ...

  7. js动态生成的DOM绑定事件失效的问题

    事件委托原理:事件冒泡机制. 优点:1. 可以大量节省内存占用,减少事件注册.比如ul 上代理所有li 的click 事件. 2. 可以实现当新增子对象时,无需再对其事件进行绑定.对动态内容部分尤为合 ...

  8. css画表格多级表头,element UI实现动态生成多级表头

    一.效果图 二.封装两个组件,分别为DynamicTable.vue和TableColumn.vue,TableColumn.vue主要是使用递归来对表头进行循环生成 DynamicTable.vue ...

  9. asp mysql 可编辑树状,基于数据库动态生成树形目录-ASP教程,数据库相关

    一. 目录树的广泛应用 为了这段内容,在百度上搜了搜,内容一大通,相关的竟没有.搜什么搜嘛?用处不是明摆着吗?资源管理器文件夹的管理,论坛中多级论坛的管理,java中的awt正是缺乏包括树形目录这样的 ...

最新文章

  1. 有了它,不会JavaScript,也能写出各种精彩页面!
  2. UIKit框架各个类的简介
  3. 【今日CV 计算机视觉论文速览】19 Mar 2019
  4. [转自李战博客]悟透JavaScript
  5. 使用Redis存取数据+数据库存取(spring+java)
  6. MacOS版/Windows桌面版微信多开双开教程技巧以及双开代码
  7. php开发工具ps,小蚂蚁学习PS切图之基础操作(2)——工具栏的介绍
  8. html -----硬回车和软回车
  9. Android下操作FrameBuffer
  10. werfault进程使用CPU率高
  11. 国行Android手机使用google全套GMS服务小结
  12. 计算机桌面图标方向变了,Win7系统桌面图标变了怎么办?
  13. cocos编写农场偷菜小游戏的总结
  14. hibernate中PO的构造器顺序
  15. 中国广告公司恶意感染8500万台手机:月赚200万
  16. centost查看网络信息_监控io性能、free命令、ps命令、查看网络状态、Linux下抓包...
  17. 基于STM32MP157的GPU编程之DRM驱动调试
  18. html css动画自动旋转,html – 使这个CSS3动画旋转只旋转一次
  19. 朗强科技:HDMI网线延长器有什么优势
  20. 51系列单片机开发培训资料整理

热门文章

  1. c++动态库调试中的脑壳疼
  2. c#对话框,文件打开对话框,
  3. 关于hit软件构造lab2实验后回顾
  4. 【项目管理】 项目管理术语总结 (PMP培训笔记)
  5. java实现图片合成gif图——输出到具体路径或流数据上传
  6. Java-JWT Utils
  7. Labview视觉一键尺寸测量仪,多产品
  8. 用vfloppy安装CDLinux到硬盘,并修改缺省extra路径参数
  9. 功能测试和自动化测试的优缺点
  10. windows 可以禁用的服务盘点