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 相关文章推荐
IE与FireFox的兼容性问题分析
Apr 22 Javascript
在VS2008中使用jQuery智能感应的方法
Dec 30 Javascript
文本有关的样式和jQuery求对象的高宽问题分别说明
Aug 30 Javascript
ff chrome和ie下全局动态定位的异同及全局高度的取法
Jun 30 Javascript
js实现简单选项卡与自动切换效果的方法
Apr 10 Javascript
javascript中scrollTop详解
Apr 13 Javascript
JavaScript通过事件代理高亮显示表格行的方法
May 27 Javascript
jquery仿京东商品放大浏览页面
Jun 06 jQuery
用vue写一个仿简书的轮播图的示例代码
Mar 13 Javascript
vue-cli 2.*中导入公共less文件的方法步骤
Nov 22 Javascript
vue与原生app的对接交互的方法(混合开发)
Nov 28 Javascript
微信小程序自定义头部导航栏(组件化)
Nov 15 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
与数据库连接
2006/10/09 PHP
DISCUZ 论坛管理员密码忘记的解决方法
2009/05/14 PHP
MySQL 日期时间函数常用总结
2012/06/12 PHP
PHP静态调用非静态方法的应用分析
2013/05/02 PHP
jQuery Div中加载其他页面的实现代码
2009/02/27 Javascript
javascript call方法使用说明
2010/01/11 Javascript
jQuery 位置函数offset,innerWidth,innerHeight,outerWidth,outerHeight,scrollTop,scrollLeft
2010/03/23 Javascript
tangram框架响应式加载图片方法
2013/11/21 Javascript
浅谈JavaScript事件的属性列表
2015/03/01 Javascript
JavaScript实现重置表单(reset)的方法
2015/04/02 Javascript
深入解析Backbone.js框架的依赖库Underscore.js的作用
2016/05/07 Javascript
js实现可控制左右方向的无缝滚动效果
2016/05/29 Javascript
有关suggest快速删除后仍然出现下拉列表的bug问题
2016/12/02 Javascript
Bootstrap CSS组件之输入框组
2016/12/17 Javascript
bootstrap侧边栏圆点导航
2017/01/11 Javascript
Javascript中字符串和数字的操作方法整理
2017/01/22 Javascript
JS实现点击循环切换显示内容的方法
2017/10/19 Javascript
Node.js笔记之process模块解读
2018/05/31 Javascript
详解NodeJs项目 CentOs linux服务器线上部署
2019/09/16 NodeJs
python网络编程学习笔记(二):socket建立网络客户端
2014/06/09 Python
深入讲解Java编程中类的生命周期
2016/02/05 Python
老生常谈Python之装饰器、迭代器和生成器
2017/07/26 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
Python 中Django安装和使用教程详解
2019/07/03 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
Python爬取股票信息,并可视化数据的示例
2020/09/26 Python
html5简单示例_动力节点Java学院整理
2017/07/07 HTML / CSS
韩国邮政旗下生鲜食品网上超市:epost
2016/08/27 全球购物
支票、地址标签、包装纸和慰问卡:Current Catalog
2018/01/30 全球购物
国际贸易专业个人求职信范文分享
2013/12/14 职场文书
服装厂厂长岗位职责
2013/12/27 职场文书
2014年秋季开学寄语
2014/08/02 职场文书
工作疏忽、懈怠的检讨书
2014/09/11 职场文书
2014年优质护理服务工作总结
2014/11/14 职场文书
运动会100米广播稿
2015/08/19 职场文书
选对餐饮营销策略,营业额才会上涨
2019/08/27 职场文书