基于jquery实现彩色投票进度条代码解析


Posted in jQuery onAugust 26, 2020

一、需求

如下图

基于jquery实现彩色投票进度条代码解析

重点是要实现进度条。

二、分析

原理:动态设置<p>的子元素<span>的宽度值。

1、简单的雏形

假设只有一个进度条,如下,我们只需要知道p元素的宽度,span元素的百分比,相乘即得到span的宽度,浏览器加载时动态设置span的宽度即可实现进度条的效果。

<style>
.long{width:100px;border:1px solid #7f7f7f;height:14px;background-color:#d6d6d6;}
.short{float:left;height:14px;background-color:#0FF;}
</style>

<body>
<P class="long"><span class="short"></span></P>
<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>
var percent=0.5;
var longWidth=100;
var shortWidth=percent*longWidth;

$(".short").animate({width:shortWidth+"px"},'slow');

</script>
</body>

基于jquery实现彩色投票进度条代码解析

2、投票进度条实现过程

第一步:

结构如下

<meta charset="utf-8">
<style>
/*样式重置*/
ul,h4,p{margin:0;padding:0;}
/*清除浮动*/
.clearfix:after{visibility:hidden;display:block;font-size:0;content:" ";clear:both;height:0;}

body { font: 12px/1.5 arial, 宋体; }
html, body { color: #333333; }
/*投票css*/
.vote-box-list{border:1px solid red;position:absolute;}
.vote-box-list li{list-style:none;margin:10px 0;}
.vote-item-wrap h4,.vote-item-wrap .vnum{float:left;font-size:14px;font-weight:normal;line-height:16px;}
.vote-item-wrap p{float:left;height:14px;width:200px;border:1px solid #E2E2E2;background-color:#EFEFEF;margin:0 10px;}
.vote-item-wrap p span{float:left;height:14px;/*width:30px;background-color:#c2f263;*/}
</style>
<ul class="vote-box-list clearfix" id="appVoteBox">
 <li class="vl-item" id="voteItem0">
  <div class="vote-item-wrap clearfix">
   <h4>A:</h4>
   <p class="litem"><span></span></p>
   <span class="vnum">79(2%)</span>
  </div>
 </li>
 <li class="vl-item" id="voteItem1" >
  <div class="vote-item-wrap clearfix">
   <h4>B:</h4>
   <p class="litem"><span></span></p>
   <span class="vnum">1986(61%)</span>
  </div>
 </li>
 <li class="vl-item" id="voteItem2">
  <div class="vote-item-wrap clearfix">
   <h4>C:</h4>
   <p class="litem"><span></span></p>
   <span class="vnum">1153(36%)</span>
  </div>
 </li>
 <li class="vl-item" id="voteItem3" >
  <div class="vote-item-wrap clearfix">
   <h4>D:</h4>
   <p class="litem"><span></span></p>
   <span class="vnum">415(13%)</span>
  </div>
 </li>
 <li class="vl-item" id="voteItem4" >
  <div class="vote-item-wrap clearfix">
   <h4>E:</h4>
   <p class="litem"><span></span></p>
   <span class="vnum">89(3%)</span>
  </div>
 </li>
</ul>

给span增加一个width和背景色,就可以出现进度条的效果。这一步用js实现。

基于jquery实现彩色投票进度条代码解析

第二步、js设置span的宽度

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>

var Vote={};
Vote.ListShow=(function(){
  var longWidth;
  var percentArr=[];
  var shortWidth=[];
  var spanArr=[];
  
  /*初始化*/
  function init(o){
    voteId=o.id;
    longWidth=o.width;
    percentArr=o.percent;
    shortWidth=calWidth();
    spanArr=findSpans();
  }
  /*根据百分比计每个算span的实际宽度*/
  function calWidth(){
    var arr=[];
    for(var i=0;i<percentArr.length;i++){
      var tempLength=percentArr[i]*longWidth;
      arr.push(tempLength);
    }
    return arr;
  }
  /*将全部span存为一个数组*/
  function findSpans(){
    var litems=$("#"+voteId).find(".litem");
    var arr=[]
    for(var i=0;i<litems.length;i++){
      arr.push(litems[i].children[0]);
    }
    return arr;
  }
  /*每个span元素设置宽度*/
  function setWidth(){
    for(i=0;i<percentArr.length;i++){
      $(spanArr[i]).animate({width:shortWidth[i]+"px"},'slow');
      $(spanArr[i]).css({'background-color':"#c2f263"}); 
    }
    
  }
  return {init:init,set:setWidth};
})();

/*调用*/
Vote.ListShow.init(
{
  id:'appVoteBox',
  width:200-2 ,
  percent:[0.02,0.61,0.36,0.13,0.3],
});
Vote.ListShow.set();

</script>

效果:

基于jquery实现彩色投票进度条代码解析

第三步,js设置span的背景色

第二步中的背景色都是如下设置为一样。

$(spanArr[i]).css({'background-color':"#c2f263"});

现在随机生成背景色,做一个彩色的进度条。

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script>

var Vote={};
Vote.ListShow=(function(){
  var longWidth;
  var percentArr=[];
  var shortWidth=[];
  var spanArr=[];
  var colorArr=[];
  
  /*初始化*/
  function init(o){
    voteId=o.id;
    longWidth=o.width;
    percentArr=o.percent;
    shortWidth=calWidth();
    spanArr=findSpans();
    colorArr=genColor();
  }
  /*根据百分比计每个算span的实际宽度*/
  function calWidth(){
    var arr=[];
    for(var i=0;i<percentArr.length;i++){
      var tempLength=percentArr[i]*longWidth;
      arr.push(tempLength);
    }
    return arr;
  }
  /*将全部span存为一个数组*/
  function findSpans(){
    var litems=$("#"+voteId).find(".litem");
    var arr=[]
    for(var i=0;i<litems.length;i++){
      arr.push(litems[i].children[0]);
    }
    return arr;
  }
  /*o是颜色数组,随机选择length种颜色返回*/
  function genColor() { 
    var o = []; 
    var n = ["#5dbc5b", "#6c81b6", "#9eb5f0", "#a5cbd6", "#aee7f8", "#c2f263", "#d843b3", "#d8e929", "#e58652", "#e7ab6d", "#ee335f", "#fbe096", "#ffc535"]; //彩色进度条
    var colorsArr = n.slice(); 
    for (var i = 0;i < percentArr.length; i++){ 
      //Math.random()返回0.0 ~ 1.0 之间的一个伪随机数。
      //Math.floor()向下取整
      var k = Math.floor(Math.random()* colorsArr.length); 
      o.push(colorsArr[k]); 
      //取完一种颜色后就从颜色数组中删除
      colorsArr.splice(k, 1); 
      if (colorsArr.length == 0){ 
      colorsArr = n.slice()} 
    } 
    return o;
  } 
  /*每个span元素设置宽度*/
  function setWidth(){
    for(i=0;i<percentArr.length;i++){
      $(spanArr[i]).animate({width:shortWidth[i]+"px"},'slow');
      $(spanArr[i]).css({'background-color':colorArr[i]}); 
    }
    
  }
  return {init:init,set:setWidth};
})();

/*调用*/

Vote.ListShow.init(
{
  id:'appVoteBox',
  width:200-2 ,
  percent:[0.02,0.61,0.36,0.13,0.3],
});
Vote.ListShow.set();

</script>

最终效果:

基于jquery实现彩色投票进度条代码解析

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
jQuery遮罩层实例讲解
May 11 jQuery
jQueryeasyui 中如何使用datetimebox 取两个日期间相隔的天数
Jun 13 jQuery
jQuery实现点击关注和取消功能
Jul 03 jQuery
详解webpack3如何正确引用并使用jQuery库
Aug 26 jQuery
jQuery Collapse1.1.0折叠插件简单使用
Aug 28 jQuery
jQuery Datatables表头不对齐的解决办法
Nov 27 jQuery
jQuery+SpringMVC中的复选框选择与传值实例
Jan 08 jQuery
jQuery+vue.js实现的多选下拉列表功能示例
Jan 15 jQuery
jQuery实现王者荣耀手风琴效果
Jan 17 jQuery
jQuery实现的解析本地 XML 文档操作示例
Apr 30 jQuery
jQuery列表动态增加和删除的实现方法
Nov 05 jQuery
jQuery是用来干什么的 jquery其实就是一个js框架
Feb 04 jQuery
Jquery 获取相同NAME 或者id删除行操作
Aug 24 #jQuery
jQuery实现评论模块
Aug 19 #jQuery
jQuery实现简单评论功能
Aug 19 #jQuery
jquery+ajax实现异步上传文件显示进度条
Aug 17 #jQuery
jQuery实现异步上传一个或多个文件
Aug 17 #jQuery
jQuery中event.target和this的区别详解
Aug 13 #jQuery
JQuery通过键盘控制键盘按下与松开触发事件
Aug 07 #jQuery
You might like
php实现根据IP地址获取其所在省市的方法
2015/04/30 PHP
PHP浮点数精度问题汇总
2015/05/13 PHP
Zend Framework+smarty用法实例详解
2016/03/19 PHP
thinkPHP实现递归循环栏目并按照树形结构无限极输出的方法
2016/05/19 PHP
thinkphp中U方法按路由规则生成url的方法
2018/03/12 PHP
PHP fopen中文文件名乱码问题解决方案
2020/10/28 PHP
jquery制作 随机弹跳的小球特效
2015/02/01 Javascript
JavaScript弹出新窗口后向父窗口输出内容的方法
2015/04/06 Javascript
JavaScript 数组- Array的方法总结(推荐)
2016/07/21 Javascript
利用Vue2.x开发实现JSON树的方法
2018/01/04 Javascript
vue实现验证码按钮倒计时功能
2018/04/10 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
每周一练 之 数据结构与算法(Stack)
2019/04/16 Javascript
使用element-ui的el-menu导航选中后刷新页面保持当前选中状态
2019/07/19 Javascript
纯异步nodejs文件夹(目录)复制功能
2019/09/03 NodeJs
Python进行数据提取的方法总结
2016/08/22 Python
Python之自动获取公网IP的实例讲解
2017/10/01 Python
浅谈使用Python变量时要避免的3个错误
2017/10/30 Python
python实现在图片上画特定大小角度矩形框
2018/10/24 Python
django表单的Widgets使用详解
2019/07/22 Python
python实现删除列表中某个元素的3种方法
2020/01/15 Python
django之从html页面表单获取输入的数据实例
2020/03/16 Python
详解Python中的编码问题(encoding与decode、str与bytes)
2020/09/30 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
世界上最大的家庭自动化公司:Smarthome
2017/12/20 全球购物
全球第二大家装零售商:Lowe’s
2018/01/13 全球购物
英文自荐信常用句子
2014/03/26 职场文书
个人委托书怎么写
2014/04/04 职场文书
幼儿园家长评语大全
2014/04/16 职场文书
经销商年会策划方案
2014/05/29 职场文书
客户答谢会致辞
2015/01/20 职场文书
房地产工程部经理岗位职责
2015/04/09 职场文书
励志语录:时光飞逝,请学会珍惜所有的人和事
2020/01/16 职场文书
如何让vue长列表快速加载
2021/03/29 Vue.js
Python办公自动化之Excel(中)
2021/05/24 Python
Anaconda安装pytorch和paddle的方法步骤
2022/04/03 Python