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 相关文章推荐
Js动态添加复选框Checkbox的实例方法
Apr 08 Javascript
jquery js 重置表单 reset()具体实现代码
Aug 05 Javascript
jquery判断复选框是否被选中的方法
Oct 16 Javascript
JavaScript生成带有缩进的表格代码
Jun 15 Javascript
jQuery中map函数的两种方式
Apr 07 jQuery
原JS实现banner图的常用功能
Jun 12 Javascript
JS对象序列化成json数据和json数据转化为JS对象的代码
Aug 23 Javascript
weex里Vuex state使用storage持久化详解
Sep 09 Javascript
小程序分页实践之编写可复用分页组件
Jul 18 Javascript
jQuery中DOM操作原则实例分析
Aug 01 jQuery
vue 查看dist文件里的结构(多种方式)
Jan 17 Javascript
js轮播图之旋转木马效果
Oct 13 Javascript
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简单解析mysqli查询结果的方法(2种方法)
2016/06/29 PHP
dropdownlist之间的互相联动实现(显示与隐藏)
2009/11/24 Javascript
基于jquery的防止大图片撑破页面的实现代码(立即缩放)
2011/10/24 Javascript
如何在node的express中使用socket.io
2014/12/15 Javascript
jquery.cookie.js使用指南
2015/01/05 Javascript
javascript html实现网页版日历代码
2016/03/08 Javascript
AngularJS基础 ng-focus 指令简单示例
2016/08/01 Javascript
Angularjs中$http以post请求通过消息体传递参数的实现方法
2016/08/05 Javascript
IOS中safari下的select下拉菜单文字过长不换行的解决方法
2016/09/26 Javascript
AngularJS入门教程之Helloworld示例
2016/12/25 Javascript
微信小程序学习(4)-系统配置app.json详解
2017/01/12 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
Vue.js原理分析之observer模块详解
2017/02/17 Javascript
JavaScript之filter_动力节点Java学院整理
2017/06/28 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
使用pkg打包ThinkJS项目的方法步骤
2019/12/30 Javascript
vue实现PC端分辨率适配操作
2020/08/03 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
[06:24]DOTA2 2015国际邀请赛中国区预选赛第二日TOP10
2015/05/27 DOTA
[48:28]完美世界DOTA2联赛循环赛FTD vs Magma第二场 10月30日
2020/10/31 DOTA
python发腾讯微博代码分享
2014/01/10 Python
分析Python编程时利用wxPython来支持多线程的方法
2015/04/07 Python
python+pandas生成指定日期和重采样的方法
2018/04/11 Python
浅谈Python3识别判断图片主要颜色并和颜色库进行对比的方法
2019/10/25 Python
python base64库给用户名或密码加密的流程
2020/01/02 Python
如何开发一款堪比APP的微信小程序(腾讯内部团队分享)
2016/12/22 HTML / CSS
德国骆驼商店:ActiveFashionWorld
2017/11/18 全球购物
动物科学专业毕业生的自我评价
2013/11/29 职场文书
合伙协议书范本
2014/04/21 职场文书
离婚协议书格式
2014/11/21 职场文书
高中开学感言
2015/08/01 职场文书
三好学生评选事迹材料(2016精选版)
2016/02/25 职场文书
python实现三阶魔方还原的示例代码
2021/04/28 Python
Django路由层如何获取正确的url
2021/07/15 Python
如何通过一篇文章了解Python中的生成器
2022/04/02 Python
Alexa停服!网站排名将何去何从?目前还没有替代品。
2022/04/15 杂记