基于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 相关文章推荐
Javascript开发包大全整理
Dec 22 Javascript
有趣的JavaScript数组长度问题代码说明
Jan 20 Javascript
JSON 数据格式介绍
Jan 13 Javascript
jquery弹出层类代码分享
Dec 27 Javascript
用js的document.write输出的广告无阻塞加载的方法
Jun 05 Javascript
jQuery学习总结之jQuery事件
Jun 30 Javascript
IE浏览器下PNG相关功能
Jul 05 Javascript
JS框架之vue.js(深入三:组件1)
Sep 29 Javascript
基于SpringMVC+Bootstrap+DataTables实现表格服务端分页、模糊查询
Oct 30 Javascript
javascript十六进制数字和ASCII字符之间的转换方法
Dec 27 Javascript
layui 表单标签的校验方法
Sep 04 Javascript
Vue3如何理解ref toRef和toRefs的区别
Feb 18 Vue.js
说说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
评分9.0以上的动画电影,剧情除了经典还很燃
2020/03/04 日漫
简单的php 验证图片生成函数
2009/05/21 PHP
PHP+MYSQL会员系统的登陆即权限判断实现代码
2011/09/23 PHP
php实现概率性随机抽奖代码
2016/01/02 PHP
Laravel自定义 封装便捷返回Json数据格式的引用方法
2019/09/29 PHP
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
jQuery function的正确书写方法
2013/08/02 Javascript
JS实现的通用表单验证插件完整实例
2015/08/20 Javascript
JS+CSS实现电子商务网站导航模板效果代码
2015/09/10 Javascript
js实现页面a向页面b传参的方法
2016/05/29 Javascript
深入浅析jQuery对象$.html
2016/08/22 Javascript
浅谈JS之iframe中的窗口
2016/09/13 Javascript
Bootstrap CSS组件之面包屑导航(breadcrumb)
2016/12/17 Javascript
AngularJS constant和value区别详解
2017/02/28 Javascript
angularJs-$http实现百度搜索时的动态下拉框示例
2018/02/27 Javascript
vue mounted组件的使用
2018/06/18 Javascript
微信小程序实现默认第一个选中变色效果
2018/07/17 Javascript
详解ESLint在Vue中的使用小结
2018/10/15 Javascript
Vue自定义指令写法与个人理解
2019/02/09 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
使用python 获取进程pid号的方法
2014/03/10 Python
对于Python中RawString的理解介绍
2016/07/07 Python
Python存取XML的常见方法实例分析
2017/03/21 Python
Python中static相关知识小结
2018/01/02 Python
Python爬虫的两套解析方法和四种爬虫实现过程
2018/07/20 Python
Django组件之cookie与session的使用方法
2019/01/10 Python
django迁移数据库错误问题解决
2019/07/29 Python
python获取linux系统信息的三种方法
2020/10/14 Python
python matlab库简单用法讲解
2020/12/31 Python
简单掌握CSS3中resize属性的用法
2016/04/01 HTML / CSS
THE OUTNET英国官网:国际设计师品牌折扣网站
2016/08/14 全球购物
学生党员公开承诺书
2014/05/28 职场文书
2014年销售部工作总结
2014/12/01 职场文书
python爬取某网站原图作为壁纸
2021/06/02 Python
使用CSS连接数据库的方式
2022/02/28 HTML / CSS