| 注册
请输入搜索内容

热门搜索

Java Linux MySQL PHP JavaScript Hibernate jQuery Nginx
pooi
10年前发布

jquery 圆形进度条

最近手里面的项目需要完成这个对设备性能的检测显示功能,需要使用到圆形进度条这样的效果,网上找了一圈,有很多相当的插件,找到:circliful 插件,看了他的使用说明比较的方便,于是就下载了它并将自己想要的效果添加了进去;

上面的效果,需要圆心中间的数字动态展示,并且在颜色值在小于50的时候为绿色,大于50的时候为红色;

第一步: 页面布局

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">  <html xmlns="http://www.w3.org/1999/xhtml">  <head>  <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  <title>圆形进度条</title>  <link rel="icon" href="images/50.gif" type="image/gif" />  <script src="js/jquery.min.js"></script>  <script src="js/jquery.circliful.js"></script>  <style>   body{ margin:0; padding:0; font-size:14px; line-height:24px; color:#8b8b8b; font-family:Microsoft YaHei, Arial, Helvetica, sans-serif;}   .you{ margin-left:36px; float:left; height:auto; width:55%; min-width:500px}   .yous{ box-shadow:0px 0px 5px  #ddd; background:#FFF;}   .youz{ background:url(./images/tbg.png) repeat-x; height:39px; line-height:39px; font-size:14px; color:#323436; text-indent:20px}   .rrlh{ height:180px; margin-top:20px}   .txz{ position: absolute; left: 50%; top: 50%; margin-left: -30px; margin-top: -30px; line-height: 30px;}   .cpu{ width:50%; height:170px; float:left; text-align:center; position:relative}  </style>  </head>  <div class="you">   <div class="yous">       <div class="youz">运行状态</div>       <div class="rrlh">     <!-- cpu使用率 -->     <div class="cpu">      <div class="txz"><span style="font-size: 40px;" id="cpuText">0</span><br /> CPU使用率</div>      <div id="myStat2" style="display: inline-block" data-width="10" data-fontsize="28" ></div>             </div>     <!-- 内存使用率 -->     <div class="cpu">      <div class="txz"><span style="font-size: 40px;" id="ncText">0</span><br /> 内存使用率</div>      <div id="myStat3" style="display: inline-block" data-width="10" data-fontsize="28" ></div>             </div>    </div>   </div>     </div>  </html>


第二步: 修改 jquery.circliful.js 

(function( $ ) {      $.fn.circliful = function(options) {          var settings = $.extend({              // These are the defaults.              foregroundColor: "#556b2f",              backgroundColor: "#eee",              fillColor: false,              width: 15,              dimension: 200,              size: 15,      percent: 50,     endPercent: 100,     showValue: "showValue", //新增 动态数值变化值显示标签ID              animationStep: 1.0          }, options );           return this.each(function() {                  var dimension = '';                  var text = '';      var info = '';                  var width = '';                  var size = 0;      var percent = 0;      var endPercent = 100;      var fgcolor = '';      var bgcolor = '';      var icon = '';                  var animationstep = 0.0;      var showValue = '';                  $(this).addClass('circliful');            showValue = settings.showValue; //赋值                        if($(this).data('dimension') != undefined) {                      dimension = $(this).data('dimension');                  } else {                      dimension = settings.dimension;                  }                        if($(this).data('width') != undefined) {                      width = $(this).data('width');                  } else {                      width = settings.width;                  }                        if($(this).data('fontsize') != undefined) {                      size = $(this).data('fontsize');                  } else {                      size = settings.size;                  }            if($(this).data('percent') != undefined) {                      percent = $(this).data('percent') / 100;       endPercent = $(this).data('percent');                  } else {                      percent = settings.percent / 100;       endPercent = settings.endPercent;                  }            if($(this).data('fgcolor') != undefined) {                      fgcolor = $(this).data('fgcolor');                  } else {                      fgcolor = settings.foregroundColor;                  }            if($(this).data('bgcolor') != undefined) {                      bgcolor = $(this).data('bgcolor');                  } else {                      bgcolor = settings.backgroundColor;                  }                        if($(this).data('animation-step') != undefined) {                      animationstep = parseFloat($(this).data('animation-step'));                  } else {                      animationstep = settings.animationStep;                  }                  if($(this).data('text') != undefined) {                      text = $(this).data('text');              if($(this).data('icon') != undefined) {        icon = '<i class="fa ' + $(this).data('icon') + '"></i>';       }               if($(this).data('type') != undefined) {        type = $(this).data('type');               if(type == 'half') {         $(this).append('<span class="circle-text-half">' +  icon  + text + '</span>');         $(this).find('.circle-text-half').css({'line-height': (dimension / 1.45) + 'px', 'font-size' : size + 'px' });        } else {         $(this).append('<span class="circle-text">' + icon + text + '</span>');         //设置文字样式         $(this).find('.circle-text').css(          {'line-height': dimension + 'px', 'font-size' : size + 'px'}         );        }       } else {        $(this).append('<span class="circle-text">' + icon + text + '</span>');        $(this).find('.circle-text').css(         {'line-height': dimension + 'px', 'font-size' : size + 'px' }        );       }                  } else if($(this).data('icon') != undefined) {            }            if($(this).data('info') != undefined) {                      info = $(this).data('info');              if($(this).data('type') != undefined) {        type = $(this).data('type');               if(type == 'half') {          $(this).append('<span class="circle-info-half">' + info + '</span>');         $(this).find('.circle-info-half').css({'line-height': (dimension * 0.9) + 'px', });        } else {         $(this).append('<span class="circle-info">' + info + '</span>');         $(this).find('.circle-info').css({'line-height': (dimension * 1.25) + 'px', });        }       } else {        $(this).append('<span class="circle-info">' + info + '</span>');        $(this).find('.circle-info').css({'line-height': (dimension * 1.25) + 'px', });       }                  }                        $(this).width(dimension + 'px');                      var canvas = $('<canvas></canvas>').attr({ width: dimension, height: dimension }).appendTo($(this)).get(0);                var context = canvas.getContext('2d');                var x = canvas.width / 2;                var y = canvas.height / 2;       var degrees = percent * 360.0;       var radians = degrees * (Math.PI / 180);                var radius = canvas.width / 2.5;                var startAngle = 2.3 * Math.PI;                var endAngle = 0;                var counterClockwise = false;                var curPerc = animationstep === 0.0 ? endPercent : 0.0;                var curStep = Math.max(animationstep, 0.0);       var circ = Math.PI * 2;       var quart = Math.PI / 2;       var type = '';       var fill = false;              if($(this).data('type') != undefined) {                      type = $(this).data('type');              if(type == 'half') {        var startAngle = 2.0 * Math.PI;        var endAngle = 3.13;        var circ = Math.PI * 1.0;        var quart = Math.PI / 0.996;       }                  }            if($(this).data('fill') != undefined) {       fill = $(this).data('fill');      } else {       fill = settings.fillColor;      }       //animate foreground circle       function animate(current) {      /**       * [修改] 设置圆心动态数据变化值       * showValue 为显示动态值的html标签的ID       * 这里 parseInt(current*100) 取整数,他的最大值为 endPercent的值       **/      $("#"+showValue).html(parseInt(current*100));      /**       * [修改] 判断值是否超过圆形的一半,并修改圆形颜色     *       **/      if(current < 0.5){       fgcolor = '#14b997';      }else{       fgcolor = '#f75656';      }            context.clearRect(0, 0, canvas.width, canvas.height);           context.beginPath();      context.arc(x, y, radius, endAngle, startAngle, false);      context.lineWidth = width - 1;        // line color      context.strokeStyle = bgcolor;      context.stroke();      if(fill) {       context.fillStyle = fill;       context.fill();      }      context.beginPath();      context.arc(x, y, radius, -(quart), ((circ) * current) - quart, false);      context.lineWidth = width;      // line color      context.strokeStyle = fgcolor;      context.stroke();        if (curPerc < endPercent) {             curPerc += curStep;        requestAnimationFrame(function () {        /**         * [修改] 降低圆形进度条速度         **/        setTimeout(function(){         animate(Math.min(curPerc, endPercent) / 100);        }, 40);        });      }      }      animate(curPerc / 100);          });      };  }( jQuery ));


第三步: 调用

$(document).ready(function(){    var cupCount = 10,     ncCount = 80;    var myStat2Color = cupCount > 50 ? '#f75656' : '#14b997';    var myStat3Color = ncCount > 50 ? '#f75656' : '#14b997';        $('#myStat2').circliful({     dimension: 170,     endPercent: cupCount,     showValue: "cpuText",     foregroundColor: myStat2Color,//556b2f     backgroundColor: "#eee",    });    $('#myStat3').circliful({     dimension: 170,     endPercent: ncCount,     showValue: "ncText",     foregroundColor: myStat3Color,     backgroundColor: "#eee",    });   });


注: 插件下载 https://github.com/pguso/jquery-plugin-circliful   按需修改,如果不妥或者其他,联系:594710017。

插件参数说明


转自:http://my.oschina.net/comfiger/blog/362281