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 组件之旅(四):测试 JavaScript 组件
Oct 28 Javascript
E3 tree 1.6在Firefox下显示问题的修复方法
Jan 30 Javascript
jQuery动画效果-fadeIn fadeOut淡入浅出示例代码
Aug 28 Javascript
JavaScript常用标签和方法总结
Sep 01 Javascript
JS实现的颜色实时渐变效果完整实例
Mar 25 Javascript
javascript运算符语法全面概述
Jul 14 Javascript
jquery ajaxfileupload异步上传插件使用详解
Feb 08 Javascript
jquery自定义显示消息数量
Dec 19 jQuery
AngularJS集合数据遍历显示的实例
Dec 27 Javascript
vue利用v-for嵌套输出多层对象,分别输出到个表的方法
Sep 07 Javascript
JS前端模块化原理与实现方法详解
Mar 17 Javascript
js this 绑定机制深入详解
Apr 30 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
Laravel日志用法详解
2016/10/09 PHP
php 三元运算符实例详细介绍
2016/12/15 PHP
thinkPHP3.2.3实现阿里大于短信验证的方法
2018/06/06 PHP
laravel model模型定义实现开启自动管理时间created_at,updated_at
2019/10/17 PHP
jquery提交form表单简单示例分享
2014/03/03 Javascript
js图片轮播效果实现代码
2020/04/18 Javascript
js计算时间差代码【包括计算,天,时,分,秒】
2016/04/26 Javascript
jQuery 获取跨域XML(RSS)数据的相关总结分析
2016/05/18 Javascript
jquery自动补齐功能插件flexselect用法示例
2016/08/06 Javascript
原生JS实现简单放大镜效果
2017/02/08 Javascript
防止重复发送 Ajax 请求
2017/02/15 Javascript
浅谈关于axios和session的一些事
2017/07/13 Javascript
JS设计模式之命令模式概念与用法分析
2018/02/06 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
vue-router传递参数的几种方式实例详解
2018/11/13 Javascript
详解React服务端渲染从入门到精通
2019/03/28 Javascript
详解关于html,css,js三者的加载顺序问题
2019/04/10 Javascript
vue实现todolist基本功能以及数据存储功能实例详解
2019/04/11 Javascript
解决VUE项目使用Element-ui 下拉组件的验证失效问题
2020/11/07 Javascript
Python结合ImageMagick实现多张图片合并为一个pdf文件的方法
2018/04/24 Python
Python对ElasticSearch获取数据及操作
2019/04/24 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
PIL包中Image模块的convert()函数的具体使用
2020/02/26 Python
Python实现Appium端口检测与释放的实现
2020/12/31 Python
新西兰优惠网站:Treat Me
2019/07/04 全球购物
FC-Moto丹麦:欧洲最大的摩托车服装和头盔商店之一
2019/08/20 全球购物
美国饼干礼物和美食甜点购买网站:Cheryl’s
2020/05/28 全球购物
机械专业个人求职自荐信格式
2013/09/21 职场文书
服装设计专业自荐书范文
2013/12/30 职场文书
初三化学教学反思
2014/01/23 职场文书
经济管理毕业生求职信
2014/03/15 职场文书
大学生党校培训心得体会
2014/09/11 职场文书
2014年国庆节演讲稿精选范文1500字
2014/09/25 职场文书
婚前财产协议书范本
2014/10/19 职场文书
Java内存模型之happens-before概念详解
2021/06/13 Java/Android