js如何实现自定义进度条效果

这篇文章主要介绍js如何实现自定义进度条效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于成都做网站、成都网站建设、滑县网络推广、微信平台小程序开发、滑县网络营销、滑县企业策划、滑县品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们最大的嘉奖;成都创新互联公司为所有大学生创业者提供滑县建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com

效果图:

js如何实现自定义进度条效果

代码如下:



 
  
  Staged progress bar
  
   *{margin:0;padding:0;}
   html,body{height:100%;}
   ul{list-style:none;}
   .cf:after{content:"";display:block;clear:both;height: 0;}
   #bar{height:20px;margin:100px 10px; margin-left: 50px}
   #bar div{float:left;position:relative;}
   #bar .staged, #bar .progress{border-color:#4CA8FF;}
   #bar .staged i{position:relative;overflow:hidden;display:block;width:inherit;height:inherit;}
   #bar .staged i:before{content:"";display:block;width:0;height:inherit;border-radius:50%;}
   #bar .progress {width:120px;height:inherit;margin-left:-4px;z-index:1;border-style:solid;border-width:2px 0;}
   #bar .progress:nth-child(2) i{border-left-width:2px;border-top-left-radius:6px;border-bottom-left-radius:6px;}
   #bar .progress:nth-child(2){border-left-width:2px;border-top-left-radius:10px;border-bottom-left-radius:10px;}
   #bar .progress:last-child{border-right-width:2px;border-top-right-radius:10px;border-bottom-right-radius:10px;}
   #bar .progress i{width:0;height:inherit;display:block;border-radius:0 10px 10px 0;position:relative;font-style:normal;}
   #bar .progress, #bar .staged{background:#7d7d7d;}
   #bar .sp i:before, #bar .progress i{background:#4CA8FF;}
   #bar .staged:not(:first-child){margin-left:-4px; }
   #bar .staged:before{position:absolute;content:attr(data-text);width:inherit;height:inherit;top:90%;left:0;}
   #bar .staged:after{content:attr(data-value);color:#fff;width:inherit;height:inherit;position:absolute;top:0;left:0;}
   #bar .sp i:before{width:100%;transition:width 1s;}
   .msg:before, .msg:after{display:block;position:absolute;border-style:solid;border-color:#ccc;background:#fff;top:30px;}
   .msg:before{content:attr(data-text);width:200px;height:40px;line-height:40px;font-size:12px;text-align:center;border-radius:4px;border-width:1px;top:-68px;left:calc(100% - 114px);}
   .msg:after{content:"";width:14px;height:14px;transform:rotate(45deg);border-width:0 1px 1px 0;top:-34px;left:calc(100% - 20px);}
  
 
 
  
   
   
   
                                     var progressBar = (function(){     var $ = function(sele){      return document.querySelectorAll(sele);     }     return function(a){      var getValue = function(obj,attr){       return Number(obj.getAttribute(a.value));      }      var box = $(a.box)[0];      var value = getValue(box);      var text = box.getAttribute(a.text);      var staged = $(a.staged);      var progress = $(a.progress);      var i = 0, index = 0, num = 0, numV = 0, n = 1, af_index = 0, timeout = 0, stopAm = null;      var af = function(fn){       if(!requestAnimationFrame || !cancelAnimationFrame){        clearTimeout(af_index);        af_index = setTimeout(fn, 1000/60);       }       else{        cancelAnimationFrame(af_index);        af_index = requestAnimationFrame(fn);       }      }      var setMsg = function(){       var msg = progress[index];       if(a.note){         var arr = text.split(a.note);         text = arr[0] + n + arr[1];       }       msg.setAttribute("data-text", text);       msg.className = a.msg;      }      var animation = function(){       if(i == 0){        if(staged.length == index + 1){         numV = value * 2;        }        else numV = getValue(staged[index + 1]);        if(n == 0) {         progress[index].style.width = "1%";         return        };        if(n < 0 && staged.length > index + 1){         n = numV - value;         if(Number(progress[index].style.width.split("%")[0])<5) progress[index].style.width = "3%";         setMsg();         return;        }       }       num = Math.ceil(++i * numV / 100);       if(num > value){        num = value;        //console.log(num)        n = numV - num;        if(n > 0){         if(staged.length > index + 1) setMsg();         return;        }       }       if(i == 100){        staged[index + 1].className += " " + a.stagedProgress;       }       if(i > 105){ //105% 宽,自己根据样式调整。        num = numV;        index++;        i = 0;        timeout = setTimeout(function(){         af(animation);         clearTimeout(timeout);        }, a.stagedSleep);        return;       }       progress[index].style.width = i + "%";       af(animation);      }      animation()     }    })();    progressBar({     box : "#bar",     text : "data-text", // box 的属性     note : "[number]", // box 的属性 (可以省略,计算好直接写入提示语句。);     msg : "msg",     staged : ".staged",     progress : ".progress i",     stagedProgress : "sp",     value : "data-value",     stagedSleep : "900",     sleep : "3000"    });     

以上是“js如何实现自定义进度条效果”这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注创新互联行业资讯频道!


本文名称:js如何实现自定义进度条效果
URL地址:http://bzwzjz.com/article/ijsgpc.html