基于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.Form实现Ajax上传文件同时设置headers的方法
Jun 26 jQuery
(模仿京东用户注册)用JQuery实现简单表单验证,初学者必看
Jan 08 jQuery
jquery+ajaxform+springboot控件实现数据更新功能
Jan 22 jQuery
jquery 给动态生成的标签绑定事件的几种方法总结
Feb 24 jQuery
jQuery实现模糊查询的方法分析
May 10 jQuery
jquery引入外部CDN 加载失败则引入本地jq库
May 23 jQuery
jquery获取元素到屏幕四周可视距离的方法
Sep 05 jQuery
浅谈JS和jQuery的区别
Mar 27 jQuery
jquery 验证用户名是否重复代码实例
May 14 jQuery
JS拖动选择table里的单元格完整实例【基于jQuery】
May 28 jQuery
jquery中为什么能用$操作
Jun 18 jQuery
jQuery事件模型默认行为执行顺序及trigger()与 triggerHandler()比较实例分析
Apr 30 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 URL跳转代码 减少外链
2011/06/25 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php面向对象中static静态属性与方法的内存位置分析
2015/02/08 PHP
ThinkPHP自定义函数解决模板标签加减运算的方法
2015/07/03 PHP
文本加密解密
2006/06/23 Javascript
javascript css float属性的特殊写法
2008/11/13 Javascript
JavaScript脚本性能优化注意事项
2008/11/18 Javascript
jquery入门—访问DOM对象方法
2013/01/07 Javascript
js实现同一页面多个运动效果的方法
2015/04/10 Javascript
基于HTML+CSS,jQuery编写的简易计算器后续(添加了键盘监听)
2016/01/05 Javascript
iframe中使用jquery进行查找的方法【案例分析】
2016/06/17 Javascript
基于JS实现导航条之调用网页助手小精灵的方法
2016/06/17 Javascript
使用Vue完成一个简单的todolist的方法
2017/12/01 Javascript
[原创]js实现保存文本框内容为本地文件兼容IE,chrome,火狐浏览器
2018/02/14 Javascript
微信小程序使用map组件实现获取定位城市天气或者指定城市天气数据功能
2019/01/22 Javascript
Vue递归组件+Vuex开发树形组件Tree--递归组件的简单实现
2019/04/01 Javascript
Vue事件修饰符native、self示例详解
2019/07/09 Javascript
vue 实现cli3.0中使用proxy进行代理转发
2019/10/30 Javascript
vue-resource post数据时碰到Django csrf问题的解决
2020/03/13 Javascript
Python读写ini文件的方法
2015/05/28 Python
python实现的简单RPG游戏流程实例
2015/06/28 Python
Python实现翻转数组功能示例
2018/01/12 Python
Python输出由1,2,3,4组成的互不相同且无重复的三位数
2018/02/01 Python
使用django-crontab实现定时任务的示例
2018/02/26 Python
Python使用Phantomjs截屏网页的方法
2018/05/17 Python
python如何查看网页代码
2020/06/07 Python
pycharm 2020.2.4 pip install Flask 报错 Error:Non-zero exit code的问题
2020/12/04 Python
Python 中Operator模块的使用
2021/01/30 Python
HTML5调用手机发短信和打电话功能
2020/04/29 HTML / CSS
Weekendesk意大利:探索多种引人入胜的周末主题
2016/10/14 全球购物
美国畅销的跑步机品牌:ProForm
2017/02/06 全球购物
服装销售人员求职自我评价
2013/09/26 职场文书
关于青春的演讲稿三分钟
2014/08/22 职场文书
2014年销售内勤工作总结
2014/12/01 职场文书
nginx基于域名,端口,不同IP的虚拟主机设置的实现
2021/03/31 Servers
SQL Server2019安装的详细步骤实战记录(亲测可用)
2022/06/10 SQL Server