canvas轨迹回放功能实现


Posted in Javascript onDecember 20, 2017

本文通过json机构,HTML代码以及JS代码详细给大家分析了canvas轨迹回放功能实现的过程,以下是全部内容。

json结构

[
  {
    "path": [
      {
        "x": 82, 
        "y": 43
      }, 
      {
        "x": 83, 
        "y": 43
      }, 
      {
        "x": 84, 
        "y": 45
      }, 
      {
        "x": 86, 
        "y": 47
      }, 
      {
        "x": 86, 
        "y": 49
      }, 
      {
        "x": 86, 
        "y": 54
      }, 
      {
        "x": 86, 
        "y": 59
      }, 
      {
        "x": 86, 
        "y": 64
      }, 
      {
        "x": 86, 
        "y": 69
      }, 
      {
        "x": 86, 
        "y": 74
      }, 
      {
        "x": 86, 
        "y": 78
      }, 
      {
        "x": 86, 
        "y": 83
      }, 
      {
        "x": 86, 
        "y": 87
      }, 
      {
        "x": 86, 
        "y": 89
      }, 
      {
        "x": 86, 
        "y": 91
      }, 
      {
        "x": 86, 
        "y": 92
      }, 
      {
        "x": 86, 
        "y": 93
      }, 
      {
        "x": 86, 
        "y": 94
      }, 
      {
        "x": 86, 
        "y": 95
      }
    ]
  }, 
  {
    "path": [
      {
        "x": 129, 
        "y": 36
      }, 
      {
        "x": 129, 
        "y": 39
      }, 
      {
        "x": 129, 
        "y": 44
      }, 
      {
        "x": 129, 
        "y": 49
      }, 
      {
        "x": 129, 
        "y": 54
      }, 
      {
        "x": 129, 
        "y": 59
      }, 
      {
        "x": 128, 
        "y": 65
      }, 
      {
        "x": 127, 
        "y": 73
      }, 
      {
        "x": 125, 
        "y": 78
      }, 
      {
        "x": 125, 
        "y": 81
      }, 
      {
        "x": 124, 
        "y": 88
      }, 
      {
        "x": 123, 
        "y": 91
      }, 
      {
        "x": 123, 
        "y": 94
      }, 
      {
        "x": 123, 
        "y": 96
      }, 
      {
        "x": 123, 
        "y": 97
      }, 
      {
        "x": 123, 
        "y": 98
      }, 
      {
        "x": 123, 
        "y": 99
      }, 
      {
        "x": 122, 
        "y": 100
      }
    ]
  }
]

html

将json作为js文件引入,并将其赋值给全局变量testPath(引入方式按照实际项目要求来)

<style>
*{margin:0; padding:0;}
#test{border:1px solid #ccc; background: #eee; margin:20px 30px;}
</style>
<p><button id="start">start</button></p>
<canvas id='test' width="600" height="200"></canvas>
<script type="text/javascript" src='js/jquery-2.1.4.min.js'></script>
<script type="text/javascript" src='js/number.js'></script>

js

$('#start').click(function(event) {
  var lineIndex = 0,pointIndex = 0,line2;
  var obj = document.getElementById('test');
  var cxt = obj.getContext('2d');
  cxt.lineWidth = 1;
  cxt.strokeStyle = 'red';
  cxt.lineCap = 'round';
  cxt.clearRect(0,0,600,200);
  function drawBegin(){
    cxt.beginPath();
    pointIndex=0;
    var intervalHandle = window.setInterval(function () {
      line2 = testPath[lineIndex].path[pointIndex];
      if (!line2) {
        window.clearInterval(intervalHandle);
        if (lineIndex < testPath.length - 1) {
          lineIndex = lineIndex + 1;
          drawBegin();
        }
      }else{
        if (pointIndex == 0) {
          cxt.moveTo(line2.x, line2.y);
        }
        pointIndex = pointIndex + 1;
        cxt.lineTo(line2.x, line2.y);
        cxt.stroke();
      }
    },0);
  }
  drawBegin();
});

以上就是本次文章的全部内容,如果大家在测试的时候还有什么疑问,可以在下方的留言区讨论。

Javascript 相关文章推荐
JavaScript中的Location地址对象
Jan 16 Javascript
通过 Dom 方法提高 innerHTML 性能
Mar 26 Javascript
extjs grid设置某列背景颜色和字体颜色的实现方法
Sep 06 Javascript
基于jquery的拖动布局插件
Nov 25 Javascript
js遍历、动态的添加数据的小例子
Jun 22 Javascript
解决jQuery上传插件Uploadify出现Http Error 302错误的方法
Dec 18 Javascript
Bootstrap模块dropdown实现下拉框响应
May 22 Javascript
jQuery插件 Jqplot图表实例
Jun 18 Javascript
使用jQuery的ajax方法向服务器发出get和post请求的方法
Jan 13 Javascript
react-router4 嵌套路由的使用方法
Jul 24 Javascript
Vue组件选项props实例详解
Aug 18 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
Apr 09 Javascript
jQuery实现动态控制页面元素的方法分析
Dec 20 #jQuery
js实现以最简单的方式将数组元素添加到对象中的方法
Dec 20 #Javascript
浅谈gulp创建完整的项目流程
Dec 20 #Javascript
vue使用axios实现文件上传进度的实时更新详解
Dec 20 #Javascript
JavaScript通过mouseover()实现图片变大效果的示例
Dec 20 #Javascript
详解JS模块导入导出
Dec 20 #Javascript
vue实现样式之间的切换及vue动态样式的实现方法
Dec 19 #Javascript
You might like
如何在PHP中使用Oracle数据库(4)
2006/10/09 PHP
用PHP的ob_start();控制您的浏览器cache!
2007/02/14 PHP
PHP处理JSON字符串key缺少双引号的解决方法
2014/09/16 PHP
两种php实现图片上传的方法
2016/01/22 PHP
YII Framework框架教程之缓存用法详解
2016/03/14 PHP
Redis构建分布式锁
2017/03/28 PHP
laravel 5异常错误:FatalErrorException in Handler.php line 38的解决
2017/10/12 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
JQuery从头学起第二讲
2010/07/04 Javascript
服务器端的JavaScript脚本 Node.js 使用入门
2012/03/07 Javascript
点击进行复制的JS代码实例
2013/08/23 Javascript
JS实现常见的TAB、弹出层效果(TAB标签,斑马线,遮罩层等)
2015/10/08 Javascript
折叠菜单及选择器的运用
2017/02/03 Javascript
BootStrap 获得轮播中的索引和当前活动的焦点对象
2017/05/11 Javascript
Rollup处理并打包JS文件项目实例代码
2018/05/31 Javascript
JavaScript 链表定义与使用方法示例
2020/04/28 Javascript
使用 UniApp 实现小程序的微信登录功能
2020/06/09 Javascript
[56:46]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 VP vs Effect
2018/04/01 DOTA
异步任务队列Celery在Django中的使用方法
2018/06/07 Python
tensorflow实现加载mnist数据集
2018/09/08 Python
Windows下安装Scrapy
2018/10/17 Python
如何利用Python分析出微信朋友男女统计图
2019/01/25 Python
python3用PIL把图片转换为RGB图片的实例
2019/07/04 Python
在Python中利用pickle保存变量的实例
2019/12/30 Python
Pytorch中的VGG实现修改最后一层FC
2020/01/15 Python
Python web如何在IIS发布应用过程解析
2020/05/27 Python
Python调用REST API接口的几种方式汇总
2020/10/19 Python
新加坡领先的在线生活方式和杂货购物网站:EAMART
2019/04/02 全球购物
ORACLE十问
2015/04/20 面试题
广州盈通面试题
2015/12/05 面试题
企划专员岗位职责
2013/12/09 职场文书
大学生素质拓展活动方案
2014/02/11 职场文书
品牌推广活动策划方案
2014/08/19 职场文书
2015年幼儿园后勤工作总结
2015/04/25 职场文书
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript