基于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 相关文章推荐
不一样的文字闪烁 轮番闪烁
Nov 11 Javascript
jQuery学习4 浏览器的事件模型
Feb 07 Javascript
异步javascript的原理和实现技巧介绍
Nov 08 Javascript
js捕获鼠标滚轮事件代码
Dec 16 Javascript
js中iframe调用父页面的方法
Oct 30 Javascript
jQuery实现的网格线绘制方法
Jun 20 Javascript
vue2.0s中eventBus实现兄弟组件通信的示例代码
Oct 25 Javascript
vue-router动态设置页面title的实例讲解
Aug 30 Javascript
node.js爬取中关村的在线电瓶车信息
Nov 13 Javascript
vue中的v-model原理,与组件自定义v-model详解
Aug 04 Javascript
解决vue net :ERR_CONNECTION_REFUSED报错问题
Aug 13 Javascript
vue element ui validate 主动触发错误提示操作
Sep 21 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
php读取30天之内的根据算法排序的代码
2008/04/06 PHP
php错误级别的设置方法
2013/06/17 PHP
php实现的百度搜索某地天气的小偷代码
2014/04/23 PHP
PHP单例模式详细介绍
2015/07/01 PHP
PHP实现的二分查找算法实例分析
2017/12/19 PHP
form中限制文本字节数js代码
2007/06/10 Javascript
一个背景云变换js特效 鼠标移动背景云变化
2012/12/28 Javascript
Javascript模块化编程(一)AMD规范(规范使用模块)
2013/01/17 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
使用CSS3的scale实现网页整体缩放
2014/03/18 Javascript
Jquery 监视按键,按下回车键触发某方法的实现代码
2014/05/11 Javascript
js操作模态窗口及父子窗口间相互传值示例
2014/06/09 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
JQuery选择器绑定事件及修改内容的方法
2015/01/23 Javascript
如何实现chrome浏览器关闭页面时弹出“确定要离开此面吗?”
2015/03/05 Javascript
jquery动画效果学习笔记(8种效果)
2015/11/13 Javascript
Vue.js基础知识汇总
2016/04/27 Javascript
javascript深拷贝(deepClone)详解
2016/08/24 Javascript
用director.js实现前端路由使用实例
2017/01/27 Javascript
原生js实现日期计算器功能
2017/02/17 Javascript
详解Vue 2.0封装axios笔记
2017/06/22 Javascript
Vue.js简易安装和快速入门(第二课)
2017/10/17 Javascript
个人小程序接入支付解决方案
2019/05/23 Javascript
js实现3D旋转效果
2020/08/18 Javascript
vue 使用lodash实现对象数组深拷贝操作
2020/09/10 Javascript
浅析Python函数式编程
2018/10/06 Python
python读取文件名并改名字的实例
2019/01/07 Python
Python进程间通信 multiProcessing Queue队列实现详解
2019/09/23 Python
pycharm部署、配置anaconda环境的教程
2020/03/24 Python
什么造成了Java里面的异常
2016/04/24 面试题
车间副主任岗位职责
2013/12/24 职场文书
九年级数学教学反思
2014/02/02 职场文书
工程项目经理任命书
2014/06/05 职场文书
垃圾分类的活动方案
2014/08/15 职场文书
Python机器学习之逻辑回归
2021/05/11 Python
解决vue $http的get和post请求跨域问题
2021/06/07 Vue.js