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 相关文章推荐
[原创]提供复制本站内容时出现,该文章转自脚本之家等字样的js代码
Mar 27 Javascript
node.js中的path.dirname方法使用说明
Dec 09 Javascript
jQuery中大家不太了解的几个方法
Mar 04 Javascript
jquery实现倒计时功能
Dec 28 Javascript
基于Bootstrap+jQuery.validate实现表单验证
May 30 Javascript
JavaScript中ES6 Babel正确安装过程
Jul 18 Javascript
详解Python中logging日志模块在多进程环境下的使用
Dec 26 Javascript
微信小程序 石头剪刀布实例代码
Jan 04 Javascript
JS实现AES加密并与PHP互通的方法分析
Apr 19 Javascript
vue内置指令详解
Apr 03 Javascript
Angular6使用forRoot() 注册单一实例服务问题
Aug 27 Javascript
关于vue.js中实现方法内某些代码延时执行
Nov 14 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
ThinkPHP路由详解
2015/07/27 PHP
PDO的安全处理与事物处理方法
2016/10/31 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
Laravel框架查询构造器简单示例
2019/05/08 PHP
NodeJs中的非阻塞方法介绍
2012/06/05 NodeJs
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
js父页面与子页面不同时显示的方法
2014/10/16 Javascript
javascript封装简单实现方法
2015/08/11 Javascript
JS实现可编辑的后台管理菜单功能【附demo源码下载】
2016/09/13 Javascript
javascript 单例模式详解及简单实例
2017/02/14 Javascript
JavaScript的for循环中嵌套一个点击事件的问题解决
2017/03/03 Javascript
微信小程序登录态控制深入分析
2017/04/12 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
Vue分页插件的前后端配置与使用
2019/10/09 Javascript
pygame学习笔记(2):画点的三种方法和动画实例
2015/04/15 Python
python运行时间的几种方法
2016/06/17 Python
利用python将图片转换成excel文档格式
2017/12/30 Python
Python动态语言与鸭子类型详解
2019/07/01 Python
Python grequests模块使用场景及代码实例
2020/08/10 Python
Scrapy 配置动态代理IP的实现
2020/09/28 Python
python将下载到本地m3u8视频合成MP4的代码详解
2020/11/24 Python
如何利用Python matplotlib绘制雷达图
2020/12/21 Python
pycharm最新激活码有效期至2100年(亲测可用)
2021/02/05 Python
英国最大的网上药品商店:Chemist Direct
2017/12/16 全球购物
微软瑞士官方网站:Microsoft瑞士
2018/04/20 全球购物
英国HYPE双肩包官网:英国本土时尚潮牌
2018/09/26 全球购物
Public Desire美国/加拿大:全球性的在线鞋类品牌
2018/12/17 全球购物
什么是servlet
2012/05/08 面试题
工伤事故赔偿协议书
2014/04/15 职场文书
做一个有道德的人活动方案
2014/08/25 职场文书
自愿离婚协议书2015
2015/01/26 职场文书
2016年元旦主持词
2015/07/06 职场文书
2016年寒假生活小结
2015/10/10 职场文书
nginx部署多前端项目的几种方法
2021/05/25 Servers
使用jpa之动态插入与修改(重写save)
2021/11/23 Java/Android
三种方式清除vue路由跳转router-link的历史记录
2022/04/10 Vue.js