基于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 相关文章推荐
jQuery中filter(),not(),split()使用方法
Jul 06 Javascript
js模拟类继承小例子
Jul 17 Javascript
js中字符替换函数String.replace()使用技巧
Aug 14 Javascript
使用GruntJS构建Web程序之构建篇
Jun 04 Javascript
JS控制弹出新页面窗口位置和大小的方法
Mar 02 Javascript
jQuery使用正则表达式限制文本框只能输入数字
Jun 18 Javascript
jQuery动态添加与删除tr行实例代码
Oct 18 Javascript
详谈JavaScript的闭包及应用
Jan 17 Javascript
数组Array的一些方法(总结)
Feb 17 Javascript
JavaScript中 ES6变量的结构赋值
Jul 10 Javascript
node.js 模块和其下载资源的镜像设置的方法
Sep 06 Javascript
JS如何定义用字符串拼接的变量
Jul 11 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
生成ubuntu自动切换壁纸xml文件的php代码
2010/07/17 PHP
php下网站防IP攻击代码,超级实用
2010/10/24 PHP
浅谈PHP中Stream(流)
2015/06/08 PHP
php微信开发之批量生成带参数的二维码
2016/06/26 PHP
jQuery不兼容input的change事件问题解决过程
2014/12/05 Javascript
javascript中eval和with用法实例总结
2015/11/30 Javascript
jQuery使用$.ajax进行异步刷新的方法(附demo下载)
2015/12/04 Javascript
常见的javascript跨域通信方法
2015/12/31 Javascript
实例解析angularjs的filter过滤器
2016/12/14 Javascript
JavaScript之class继承_动力节点Java学院整理
2017/07/03 Javascript
Kindeditor单独调用单图上传增加预览功能的实例
2017/07/31 Javascript
详解Puppeteer 入门教程
2018/05/09 Javascript
浅谈Node.js 中间件模式
2018/06/12 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
[01:34]2014DOTA2展望TI 剑指西雅图VG战队专访
2014/06/30 DOTA
Python增量循环删除MySQL表数据的方法
2016/09/23 Python
Python2包含中文报错的解决方法
2018/07/09 Python
Python 将Matrix、Dict保存到文件的方法
2018/10/30 Python
Python实现微信机器人的方法
2019/09/06 Python
Pytest如何使用skip跳过执行测试
2020/08/13 Python
Python random模块的使用示例
2020/10/10 Python
python反编译教程之2048小游戏实例
2021/03/03 Python
泰坦健身器材:Titan Fitness
2018/02/13 全球购物
有趣的流行文化T恤、马克杯、手机壳和更多:Look Human
2019/01/07 全球购物
求职信格式范本
2013/11/15 职场文书
车间操作工岗位职责
2013/12/19 职场文书
关于环保的建议书400字
2014/03/12 职场文书
公司投资建议书
2014/05/16 职场文书
上课迟到检讨书300字
2014/10/15 职场文书
爱岗敬业事迹材料
2014/12/24 职场文书
工厂仓库管理员岗位职责
2015/04/09 职场文书
检讨书格式
2015/05/07 职场文书
黑白记忆观后感
2015/06/18 职场文书
2016年万圣节活动总结
2016/04/05 职场文书
解析laravel使用workerman用户交互、服务器交互
2021/04/28 PHP
Java线程的6种状态与生命周期
2022/05/11 Java/Android