基于JS实现带动画效果的流程进度条


Posted in Javascript onJune 01, 2018

当在使用流程的时候,比如有一个审核流程,有三个阶段:开始,审核中,审核成功。当在不同的阶段,做相应的进度显示,当显示时,是以动画的形式显示的。话不多说,我们开始打造吧。

    首先,我考虑的是使用canvas来打造这个控件,于是我现在demo.html里新建了一个canvas用来显示测试用,并且先预计了几个属性值,在做的过程中增增改改,最终属性如下:

<canvas id="myCanvas" width="800" height="100" style="background:#efefef" data-show="开始|审核中|预审核|结束" data-font-size="16" 
    data-r="15" dara-progress="3" data-speed="20" data-fill-colour="#ffff00" data-padding="10"> 
  您的浏览器不支持 HTML5 canvas 标签。</canvas>

然后开始编写相应的js文件,我将其命名为ct_progress.js。我的目的是打造一款使用者可以自由配置的显示控件,于是定义了一下可配置的属性:

var c=document.getElementById("myCanvas"); 
var showStr = c.getAttribute("data-show"); 
var showStrs = showStr.split("|"); 
var r = c.hasAttribute("data-r")?Number(c.getAttribute("data-r")):15; 
var ctx=c.getContext("2d"); 
var padding = c.hasAttribute("data-padding")?Number(c.getAttribute("data-padding")):10;//左右上的间隔 
var space = (c.getAttribute("width")-2*r-2*padding)/(showStrs.length-1); 
var speed = c.hasAttribute("data-speed")?Number(c.getAttribute("data-speed")):20;//动画速度 
var fillColour = c.hasAttribute("data-fill-colour")?c.getAttribute("data-fill-colour"):"#ffff00";//填充色 
var fontSize = c.hasAttribute("data-font-size")?Number(c.getAttribute("data-font-size")):15;

属性完成,开始使用canvas使用这些属性值开始进行初始化画图:

for(var i in showStrs) 
{ 
  ctx.beginPath(); 
  ctx.fillStyle="#ffffff"; 
  ctx.arc(r+i*space+padding,r+padding,r,0,2*Math.PI);//前面两个参数为圆心坐标,第三个为半径,第四个为起始角。第五个为结束角 
  ctx.fill(); 
  if(i!=0) 
  { 
    ctx.fillRect(r+(i-1)*space+padding,r/2+padding,space,r);//前面两个左上角坐标,后面两个宽高 
  } 
  ctx.beginPath(); 
  ctx.fillStyle="#333333"; 
  ctx.font=fontSize+"px Georgia";//一定要指定字体否则大小没有用 
  ctx.fillText(showStrs[i],r+i*space-r+padding,r*2+fontSize+10+padding);//左下角为起点 
  ctx.stroke(); 
}

此时画出了一个静态的没有进度的流程进度条。然后为这个进度条加上显示时的动画:

var proW = 0;//进度长度 
var progress = c.hasAttribute("dara-progress")?Number(c.getAttribute("dara-progress")):showStrs.length;// 
var showW = space*progress;//计算应该显示的进度长度 
var i=0,j; 
var int = setInterval(function () { 
  //清除 
  //ctx.clearRect(0, 0, c.width, c.height);//不清除在原图上画了覆盖 
  j=i; 
  i = parseInt(proW/space); 
  if(i>j) 
  { 
    ctx.beginPath(); 
    ctx.fillStyle=fillColour; 
    ctx.fillRect(r+j*space+padding,r/2+padding,space,r);//前面两个左上角坐标,后面两个宽高 
    //clearArc(ctx,r+j*space+padding,r+padding,r,1);//清除圆部 
  } 
  else 
  { 
    if(i<progress) 
    { 
      ctx.beginPath(); 
      ctx.fillStyle=fillColour; 
      ctx.fillRect(r+i*space+padding,r/2+padding,proW-i*space,r);//前面两个左上角坐标,后面两个宽高 
    } 
  } 
  //clearArc(ctx,r+i*space+padding,r+padding,r,1);//清除圆部 
  ctx.beginPath(); 
  ctx.fillStyle=fillColour; 
  ctx.arc(r+i*space+padding,r+padding,r,0,2*Math.PI);//前面两个参数为圆心坐标,第三个为半径,第四个为起始角。第五个为结束角 
  ctx.fill(); 
  if(proW>=showW) 
  { 
    clearInterval(int); 
  } 
  proW+=speed; 
}, 150);

这样便完成了一个简单的带显示动画的流程进度条。最终效果如下:

基于JS实现带动画效果的流程进度条

具体控件使用以及源码,详见github:点击打开链接希望学习或有用到的童鞋star一下,感谢

总结

以上所述是小编给大家介绍的基于JS实现带动画效果的流程进度条,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
IE和Firefox下event事件杂谈
Dec 18 Javascript
JavaScript性能陷阱小结(附实例说明)
Dec 28 Javascript
js URL参数的拼接方法比较
Feb 15 Javascript
jquery中$.post()方法的简单实例
Feb 04 Javascript
js设置function参数默认值(适合没有传参情况)
Feb 24 Javascript
Javascript闭包用法实例分析
Jan 23 Javascript
transport.js和jquery冲突问题的解决方法
Feb 10 Javascript
AngularJS压缩JS技巧分析
Nov 08 Javascript
基于canvas粒子系统的构建详解
Aug 31 Javascript
vue cli使用绝对路径引用图片问题的解决
Dec 06 Javascript
vue ssr 实现方式(学习笔记)
Jan 18 Javascript
微信小程序实现左滑删除效果
Nov 18 Javascript
说说node中的可读流和可写流的区别
Jun 01 #Javascript
Angularjs之如何在跨域请求中传输Cookie的方法
Jun 01 #Javascript
React 使用browserHistory项目访问404问题解决
Jun 01 #Javascript
详解vue-router 命名路由和命名视图
Jun 01 #Javascript
node.js利用socket.io实现多人在线匹配联机五子棋
May 31 #Javascript
JS与jQuery实现ListBox上移,下移,左移,右移操作功能示例
May 31 #jQuery
微信小程序登录换取token的教程
May 31 #Javascript
You might like
全局记录程序片段的运行时间 正确找到程序逻辑耗时多的断点
2011/01/06 PHP
对淘宝URL中ID提取的PHP代码
2013/09/01 PHP
PHP时间类完整实例(非常实用)
2015/12/25 PHP
制作个性化的WordPress登陆界面的实例教程
2016/05/21 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
jqPlot 图表中文API使用文档及源码和在线示例
2012/02/07 Javascript
提高NodeJS中SSL服务的性能
2014/07/15 NodeJs
一种新的javascript对象创建方式Object.create()
2015/12/28 Javascript
JavaScript 数组中最大最小值
2016/06/05 Javascript
Vue获取DOM元素样式和样式更改示例
2017/03/07 Javascript
Angular 2父子组件数据传递之@ViewChild获取子组件详解
2017/07/04 Javascript
深入掌握 react的 setState的工作机制
2017/09/27 Javascript
JS/HTML5游戏常用算法之路径搜索算法 A*寻路算法完整实例
2018/12/14 Javascript
jQuery实现当拉动滚动条到底部加载数据的方法分析
2019/01/24 jQuery
一个Java程序猿眼中的前后端分离以及Vue.js入门(推荐)
2019/04/19 Javascript
微信小程序 自定义复选框实现代码实例
2019/09/04 Javascript
three.js 实现露珠滴落动画效果的示例代码
2021/03/01 Javascript
[49:13]DOTA2上海特级锦标赛C组资格赛#1 OG VS LGD第一局
2016/02/27 DOTA
Python中使用中文的方法
2011/02/19 Python
解决Python正则表达式匹配反斜杠''\''问题
2019/07/17 Python
基于python实现对文件进行切分行
2020/04/26 Python
Django使用Profile扩展User模块方式
2020/05/14 Python
理解Django 中Call Stack机制的小Demo
2020/09/01 Python
python3.7.3版本和django2.2.3版本是否可以兼容
2020/09/01 Python
红色康乃馨酒店:Red Carnation Hotels
2017/06/22 全球购物
英国时尚运动品牌的合集:The Sports Edit
2017/12/20 全球购物
受希腊女神灵感的晚礼服、鸡尾酒礼服和婚纱:THEIA
2018/04/15 全球购物
PREMIUM-MALL法国:行李、箱包及配件在线
2019/05/30 全球购物
Shopee菲律宾:在线购买和出售
2019/11/25 全球购物
Linux管理员面试题 Linux admin interview questions
2016/07/08 面试题
学校七一活动方案
2014/01/19 职场文书
团组织推优材料
2014/12/29 职场文书
服务员岗位职责范本
2015/04/09 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
使用Vue3+Vant组件实现App搜索历史记录功能(示例代码)
2021/06/09 Vue.js
flex布局中使用flex-wrap实现换行的项目实践
2022/06/21 HTML / CSS