基于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 19 jQuery
JQuery 封装 Ajax 常用方法(推荐)
May 21 jQuery
jquery请求servlet实现ajax异步请求的示例
Jun 03 jQuery
jquery实现一个全局计时器(商城可用)
Jun 30 jQuery
jQuery zTree 异步加载添加子节点重复问题
Nov 29 jQuery
jQuery实现获取动态添加的标签对象示例
Jun 28 jQuery
jQuery实现checkbox全选功能完整实例
Jul 12 jQuery
jQuery+Datatables实现表格批量删除功能【推荐】
Oct 24 jQuery
通过JQuery,JQueryUI和Jsplumb实现拖拽模块
Jun 18 jQuery
Jquery实现获取子元素的方法分析
Aug 24 jQuery
jQuery轮播图功能制作方法详解
Dec 03 jQuery
viewer.js一个强大的基于jQuery的图像查看插件(支持旋转、缩放)
Apr 01 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
PHP实现图片旋转效果实例代码
2014/10/01 PHP
PHP文字转图片功能原理与实现方法分析
2017/08/31 PHP
PHP curl批处理及多请求并发实现方法分析
2018/08/15 PHP
javascript GUID生成器实现代码
2009/10/31 Javascript
js操作css属性实现div层展开关闭效果的方法
2015/05/11 Javascript
WebGL利用FBO完成立方体贴图效果完整实例(附demo源码下载)
2016/01/26 Javascript
基于jQuery实现表格的查看修改删除
2016/08/01 Javascript
AngularJS 服务详细讲解及示例代码
2016/08/17 Javascript
js自定义trim函数实现删除两端空格功能
2018/02/09 Javascript
JavaScript面向对象编程小游戏---贪吃蛇代码实例
2019/05/15 Javascript
利用H5api实现时钟的绘制(javascript)
2020/09/13 Javascript
Vue 的 v-model用法实例
2020/11/23 Vue.js
高性能web服务器框架Tornado简单实现restful接口及开发实例
2014/07/16 Python
在Django的session中使用User对象的方法
2015/07/23 Python
Python中实现变量赋值传递时的引用和拷贝方法
2018/04/29 Python
基于Python中求和函数sum的用法详解
2018/06/28 Python
Pycharm 实现下一个文件引用另外一个文件的方法
2019/01/17 Python
Python程序控制语句用法实例分析
2020/01/14 Python
Python使用os.listdir和os.walk获取文件路径
2020/05/21 Python
Python同时处理多个异常的方法
2020/07/28 Python
容易被忽略的Python内置类型
2020/09/03 Python
整理HTML5的一些新特性与Canvas的常用属性
2016/01/29 HTML / CSS
欧舒丹澳洲版:L’OCCITANE
2017/07/17 全球购物
美国摩托车头盔、零件、齿轮及配件商店:Cycle Gear
2019/06/12 全球购物
Kappa英国官方在线商店:服装和运动器材
2020/11/22 全球购物
Linux常见面试题
2013/03/18 面试题
如何写毕业求职自荐信
2013/11/06 职场文书
四群教育工作实施方案
2014/03/26 职场文书
保险公司开门红口号
2014/06/21 职场文书
团结主题班会
2015/08/13 职场文书
五一放假通知怎么写
2015/08/18 职场文书
2016年小学端午节活动总结
2016/04/01 职场文书
PHP 对接美团大众点评团购券(门票)的开发步骤
2021/04/03 PHP
redis配置文件中常用配置详解
2021/04/14 Redis
react 项目中引入图片的几种方式
2021/06/02 Javascript