canvas绘制的直线动画


Posted in Javascript onJanuary 23, 2017

话不多说,请看代码:

<!DOCTYPE html>
<html>
 <head>
 <meta charset="UTF-8">
 <title>first line</title>
 <style type="text/css">
       body{
         background: #456E89;
       }
 .canvas {
 height: 300px;
 width: 300px; 
 margin: 0 auto;
 font-family: arial;
 }
 </style>
 </head>
 <body>
 <div class="canvas">
 <canvas id="cvs" width="300" height="300"></canvas>
 </div>
 <script type="text/javascript">
 var cvs = document.getElementById("cvs").getContext("2d");
 function Anim(opt) { //初始化值
 this.opt = opt;
 }
 //node 表示画布节点
 //staX 表示开始x坐标
 //staY 表示开始y坐标
 //len表示终点坐标,
 //timing表示运行的间隔时间, 
 //num表示坐标增长的大小 
 //direc表示判断绘制线条的方向,false表示X轴,ture表示Y轴
 //lw表示线宽的大小 
 //color 表示绘制线条颜色
 Anim.prototype.draw = function() { //绘制直线的线条
 var opt = this.opt; //设置对象的属性
 var adx = opt.staX;
 var ady = opt.staY;
 var that = {
  x: opt.staX,
  y: opt.staY
 };
 var Time = setInterval(function() {
  opt.direc //判断绘制方向
  ?
  opt.len > ady ? ady += opt.num : ady -= opt.num :
  opt.len > adx ? adx += opt.num : adx -= opt.num;
  if(adx == opt.len || ady == opt.len) { //停止循环
  clearInterval(Time);
  }
  opt.Node.beginPath(); // 开始绘制线条
  opt.Node.moveTo(that.x, that.y);
  opt.Node.lineTo(adx, ady);
  opt.Node.lineWidth = opt.lw || 1;
  opt.Node.strokeStyle = opt.color;
  opt.Node.stroke();
 }, opt.timing);
 };
 Anim.prototype.txt = function(opc) {//绘制文字 
 cvs.beginPath();
 cvs.fillStyle = "rgba(255,255,255,"+opc+")";
 cvs.font = "200px arial";
 cvs.fillText("L", 100, 200);
 };
 var line1 = new Anim({ //实例
 Node: cvs,
 color: "#fff",
 staX: 114,
 staY: 58,
 len: 134,
 timing: 50,
 num: 1,
 direc: false,
 lw: 2
 });
 line1.draw(); //执行绘制
 var line2 = new Anim({
 Node: cvs,
 color: "#fff",
 staX: 115,
 staY: 58,
 len: 200,
 timing: 20,
 num: 1,
 direc: true,
 lw: 2
 });
 line2.draw();
 var line3 = new Anim({
 Node: cvs,
 color: "#fff",
 staX: 133,
 staY: 184,
 len: 58,
 timing: 20,
 num: 1,
 direc: true,
 lw: 2
 });
 line3.draw();
 var line4 = new Anim({
 Node: cvs,
 color: "#fff",
 staX: 132,
 staY: 184,
 len: 203,
 timing: 35,
 num: 1,
 direc: false,
 lw: 2
 });
 line4.draw();
 var line5 = new Anim({
 Node: cvs,
 color: "#fff",
 staX: 203,
 staY: 199,
 len: 115,
 timing: 35,
 num: 1,
 direc: false,
 lw: 2
 });
 line5.draw();
 var line6 = new Anim({
 Node: cvs,
 color: "#fff",
 staX: 203,
 staY: 199,
 len: 184,
 timing: 50,
 num: 1,
 direc: true,
 lw: 2
 });
 line6.draw();
 var test = new Anim();//绘制文字实例
 setTimeout(function () {
 var num = 0;
 var times = setInterval(function () {
  num++;
  var t = num/100;
  if(t === 1){
  clearInterval(times);
  }
  test.txt(t);
 },50)
 },3000)
 </script>
 </body>
</html>

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
javascript document.execCommand() 常用解析
Dec 14 Javascript
JQuery扩展插件Validate 1 基本使用方法并打包下载
Sep 05 Javascript
用Jquery.load载入页面实现局部刷新
Jan 22 Javascript
Extjs表单常见验证小结
Mar 07 Javascript
JavaScript Length 属性的总结
Nov 02 Javascript
jQuery实现宽屏图片轮播实例教程
Nov 24 Javascript
vue双向数据绑定原理探究(附demo)
Jan 17 Javascript
使用Angular CLI生成 Angular 5项目教程详解
Mar 18 Javascript
vue小白入门教程
Apr 02 Javascript
JS通过位运算实现权限加解密
Aug 14 Javascript
ES6 Promise对象概念及用法实例详解
Oct 15 Javascript
vue使用element-ui实现表单验证
Dec 13 Vue.js
node.js实现复制文本到剪切板的功能
Jan 23 #Javascript
jQuery 全选 全不选 事件绑定的实现代码
Jan 23 #Javascript
Javascript中构造函数要注意的一些坑
Jan 23 #Javascript
在 Angular2 中实现自定义校验指令(确认密码)的方法
Jan 23 #Javascript
jQuery.cookie.js实现记录最近浏览过的商品功能示例
Jan 23 #Javascript
利用JS实现简单的日期选择插件
Jan 23 #Javascript
获取IE浏览器Cookie信息的方法
Jan 23 #Javascript
You might like
php读取本地json文件的实例
2018/03/07 PHP
详解关于php的xdebug配置(编辑器vscode)
2019/01/29 PHP
jQuery封装的获取Url中的Get参数示例
2013/11/26 Javascript
ANGULARJS中用NG-BIND指令实现单向绑定的例子
2014/12/08 Javascript
AngularJS上拉加载问题解决方法
2016/05/23 Javascript
sso跨域写cookie的一段js脚本(推荐)
2016/05/25 Javascript
基于js中的原型、继承的一些想法
2016/08/10 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
javascript 判断是否是微信浏览器的方法
2016/10/09 Javascript
js中class的点击事件没有效果的解决方法
2016/10/13 Javascript
jQuery web 组件 后台日历价格、库存设置的代码
2016/10/14 Javascript
基于vuejs+webpack的日期选择插件
2020/05/21 Javascript
javascript实现数据双向绑定的三种方式小结
2017/03/09 Javascript
JavaScript实现的选择排序算法实例分析
2017/04/14 Javascript
浅谈在fetch方法中添加header后遇到的预检请求问题
2017/08/31 Javascript
JavaScript中正则表达式使数字、中文或指定字符高亮显示
2017/10/31 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
JavaScript遍历数组的三种方法map、forEach与filter实例详解
2019/02/27 Javascript
解决layui的input独占一行的问题
2019/09/10 Javascript
vue中监听路由参数的变化及方法
2019/12/06 Javascript
Javascript原生ajax请求代码实例
2020/02/20 Javascript
基于vue3.0.1beta搭建仿京东的电商H5项目
2020/05/06 Javascript
[46:10]2014 DOTA2国际邀请赛中国区预选赛 CnB VS HGT
2014/05/21 DOTA
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
Python多进程multiprocessing.Pool类详解
2018/04/27 Python
python脚本监控Tomcat服务器的方法
2018/07/06 Python
python 输入一个数n,求n个数求乘或求和的实例
2018/11/13 Python
对python的输出和输出格式详解
2018/12/08 Python
python3爬虫获取html内容及各属性值的方法
2018/12/17 Python
Python小游戏之300行代码实现俄罗斯方块
2019/01/04 Python
解决PyCharm控制台输出乱码的问题
2019/01/16 Python
Python彻底删除文件夹及其子文件方式
2019/12/23 Python
python3中sorted函数里cmp参数改变详解
2020/03/12 Python
德国最大的拼图在线商店:Puzzle.de
2016/12/17 全球购物
告知书格式
2015/07/01 职场文书
《开国大典》教学反思
2016/02/16 职场文书