2017-10-16 35 views
0

我正在使用circliful插件,但我还想包括浮点值以及此插件仅适用于整数值。 任何想法我可以如何工作的浮动值?具有浮点值的进度条

$(function() { 
 
\t $('#progress').circliful(); 
 
}); 
 

 

 
//Note -- I removed the respondCanvas function from the circiful library 
 
/* PROGRESS CIRCLE COMPONENT */ 
 
(function ($) { 
 

 
    $.fn.circliful = function (options, callback) { 
 

 
     var settings = $.extend({ 
 
      // These are the defaults. 
 
      startdegree: 0, 
 
      fgcolor: "#556b2f", 
 
      bgcolor: "#eee", 
 
      fill: false, 
 
      width: 15, 
 
      dimension: 200, 
 
      fontsize: 15, 
 
      percent: 50, 
 
      animationstep: 1.0, 
 
      iconsize: '20px', 
 
      iconcolor: '#999', 
 
      border: 'default', 
 
      complete: null, 
 
      bordersize: 10 
 
     }, options); 
 

 
     return this.each(function() { 
 

 
      var customSettings = ["fgcolor", "bgcolor", "fill", "width", "dimension", "fontsize", "animationstep", "endPercent", "icon", "iconcolor", "iconsize", "border", "startdegree", "bordersize"]; 
 

 
      var customSettingsObj = {}; 
 
      var icon = ''; 
 
      var endPercent = 0; 
 
      var obj = $(this); 
 
      var fill = false; 
 
      var text, info; 
 

 
      obj.addClass('circliful'); 
 

 
      checkDataAttributes(obj); 
 

 
      if (obj.data('text') != undefined) { 
 
       text = obj.data('text'); 
 

 
       if (obj.data('icon') != undefined) { 
 
        icon = $('<i></i>') 
 
         .addClass('fa ' + $(this).data('icon')) 
 
         .css({ 
 
          'color': customSettingsObj.iconcolor, 
 
          'font-size': customSettingsObj.iconsize 
 
         }); 
 
       } 
 

 
       if (obj.data('type') != undefined) { 
 
        type = $(this).data('type'); 
 

 
        if (type == 'half') { 
 
         addCircleText(obj, 'circle-text-half', (customSettingsObj.dimension/1.45)); 
 
        } else { 
 
         addCircleText(obj, 'circle-text', customSettingsObj.dimension); 
 
        } 
 
       } else { 
 
        addCircleText(obj, 'circle-text', customSettingsObj.dimension); 
 
       } 
 
      } 
 

 
      if ($(this).data("total") != undefined && $(this).data("part") != undefined) { 
 
       var total = $(this).data("total")/100; 
 

 
       percent = (($(this).data("part")/total)/100).toFixed(3); 
 
       endPercent = ($(this).data("part")/total).toFixed(3) 
 
      } else { 
 
       if ($(this).data("percent") != undefined) { 
 
        percent = $(this).data("percent")/100; 
 
        endPercent = $(this).data("percent") 
 
       } else { 
 
        percent = settings.percent/100 
 
       } 
 
      } 
 

 
      if ($(this).data('info') != undefined) { 
 
       info = $(this).data('info'); 
 

 
       if ($(this).data('type') != undefined) { 
 
        type = $(this).data('type'); 
 

 
        if (type == 'half') { 
 
         addInfoText(obj, 0.9); 
 
        } else { 
 
         addInfoText(obj, 1.25); 
 
        } 
 
       } else { 
 
        addInfoText(obj, 1.25); 
 
       } 
 
      } 
 

 
      $(this).width(customSettingsObj.dimension + 'px'); 
 

 
      var canvas = $('<canvas></canvas>').attr({ 
 
       width: customSettingsObj.dimension, 
 
       height: customSettingsObj.dimension 
 
      }).appendTo($(this)).get(0); 
 

 
      var context = canvas.getContext('2d'); 
 
      var container = $(canvas).parent(); 
 
      var x = canvas.width/2; 
 
      var y = canvas.height/2; 
 
      var degrees = customSettingsObj.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 = customSettingsObj.animationstep === 0.0 ? endPercent : 0.0; 
 
      var curStep = Math.max(customSettingsObj.animationstep, 0.0); 
 
      var circ = Math.PI * 2; 
 
      var quart = Math.PI/2; 
 
      var type = ''; 
 
      var fireCallback = true; 
 
      var additionalAngelPI = (customSettingsObj.startdegree/180) * Math.PI; 
 

 
      if ($(this).data('type') != undefined) { 
 
       type = $(this).data('type'); 
 

 
       if (type == 'half') { 
 
        startAngle = 2.0 * Math.PI; 
 
        endAngle = 3.13; 
 
        circ = Math.PI; 
 
        quart = Math.PI/0.996; 
 
       } 
 
      } 
 
      
 
      /** 
 
      * adds text to circle 
 
      * 
 
      * @param obj 
 
      * @param cssClass 
 
      * @param lineHeight 
 
      */ 
 
      function addCircleText(obj, cssClass, lineHeight) { 
 
       $("<span></span>") 
 
        .appendTo(obj) 
 
        .addClass(cssClass) 
 
        .text(text) 
 
        .prepend(icon) 
 
        .css({ 
 
         'line-height': lineHeight + 'px', 
 
         'font-size': customSettingsObj.fontsize + 'px' 
 
        }); 
 
      } 
 

 
      /** 
 
      * adds info text to circle 
 
      * 
 
      * @param obj 
 
      * @param factor 
 
      */ 
 
      function addInfoText(obj, factor) { 
 
       $('<span></span>') 
 
        .appendTo(obj) 
 
        .addClass('circle-info-half') 
 
        .css(
 
         'line-height', (customSettingsObj.dimension * factor) + 'px' 
 
        ) 
 
        .text(info); 
 
      } 
 

 
      /** 
 
      * checks which data attributes are defined 
 
      * @param obj 
 
      */ 
 
      function checkDataAttributes(obj) { 
 
       $.each(customSettings, function (index, attribute) { 
 
        if (obj.data(attribute) != undefined) { 
 
         customSettingsObj[attribute] = obj.data(attribute); 
 
        } else { 
 
         customSettingsObj[attribute] = $(settings).attr(attribute); 
 
        } 
 

 
        if (attribute == 'fill' && obj.data('fill') != undefined) { 
 
         fill = true; 
 
        } 
 
       }); 
 
      } 
 

 
      /** 
 
      * animate foreground circle 
 
      * @param current 
 
      */ 
 
      function animate(current) { 
 

 
       context.clearRect(0, 0, canvas.width, canvas.height); 
 

 
       context.beginPath(); 
 
       context.arc(x, y, radius, endAngle, startAngle, false); 
 

 
       context.lineWidth = customSettingsObj.bordersize + 1; 
 

 
       context.strokeStyle = customSettingsObj.bgcolor; 
 
       context.stroke(); 
 

 
       if (fill) { 
 
        context.fillStyle = customSettingsObj.fill; 
 
        context.fill(); 
 
       } 
 

 
       context.beginPath(); 
 
       context.arc(x, y, radius, -(quart) + additionalAngelPI, ((circ) * current) - quart + additionalAngelPI, false); 
 

 
       if (customSettingsObj.border == 'outline') { 
 
        context.lineWidth = customSettingsObj.width + 13; 
 
       } else if (customSettingsObj.border == 'inline') { 
 
        context.lineWidth = customSettingsObj.width - 13; 
 
       } 
 

 
       context.strokeStyle = customSettingsObj.fgcolor; 
 
       context.stroke(); 
 

 
       if (curPerc < endPercent) { 
 
        curPerc += curStep; 
 
        requestAnimationFrame(function() { 
 
         animate(Math.min(curPerc, endPercent)/100); 
 
        }, obj); 
 
       } 
 

 
       if (curPerc == endPercent && fireCallback && typeof(options) != "undefined") { 
 
        if ($.isFunction(options.complete)) { 
 
         options.complete(); 
 

 
         fireCallback = false; 
 
        } 
 
       } 
 
      } 
 

 
      animate(curPerc/100); 
 

 
     }); 
 
    }; 
 
}(jQuery));
/* DEMO STYLES */ 
 
body { 
 
    max-width: 300px; 
 
    margin: 1em auto; 
 
    background: #db3a3d; 
 
    text-align:center; 
 
} 
 

 

 
/* PROGRESS CIRCLE COMPONENT */ 
 
.circliful { 
 
    margin:auto; 
 
    position: relative; 
 
} 
 

 
.circle-text, .circle-info, .circle-text-half, .circle-info-half { 
 
    width: 100%; 
 
    position: absolute; 
 
    text-align: center; 
 
    display: inline-block; 
 
} 
 

 
.circle-info, .circle-info-half { 
 
\t color: #999; 
 
} 
 

 
.circliful .fa { 
 
\t margin: -10px 3px 0 3px; 
 
\t position: relative; 
 
\t bottom: 4px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div class="well" style="background: #fff;"> 
 
    <h2>Progress Circle</h2> 
 
    <hr> 
 
    <div class="row"> 
 
    <div id="progress" data-dimension="200" data-text="65%" data-fontsize="36" data-percent="65" data-fgcolor="#30B455" data-bgcolor="#eee" data-width="15" data-bordersize="15" data-animationstep="2"></div> 
 
    </div> 
 
    
 
    <br> 
 
    <a class="btn btn-default" href="https://github.com/pguso/jquery-plugin-circliful" target="_blank"> 
 
     Circliful Docs <i class="glyphicon glyphicon-new-window"></i> 
 
    </a> 
 
</div>

+0

https://codepen.io/jacobhummel/pen/kyugL –

+0

插件我正在使用的代码 –

+0

对我来说看起来很好。你是什​​么意思,它'适用于整数,但不漂浮'? – hayavuk

回答

1

让我知道,如果它是为你工作

$(function() { 
 
\t $('#progress').circliful(); 
 
}); 
 

 

 
//Note -- I removed the respondCanvas function from the circiful library 
 
/* PROGRESS CIRCLE COMPONENT */ 
 
(function ($) { 
 

 
    $.fn.circliful = function (options, callback) { 
 

 
     var settings = $.extend({ 
 
      // These are the defaults. 
 
      startdegree: 0, 
 
      fgcolor: "#556b2f", 
 
      bgcolor: "#eee", 
 
      fill: false, 
 
      width: 15, 
 
      dimension: 200, 
 
      fontsize: 15, 
 
      percent: 50, 
 
      animationstep: 1.0, 
 
      iconsize: '20px', 
 
      iconcolor: '#999', 
 
      border: 'default', 
 
      complete: null, 
 
      bordersize: 10 
 
     }, options); 
 

 
     return this.each(function() { 
 

 
      var customSettings = ["fgcolor", "bgcolor", "fill", "width", "dimension", "fontsize", "animationstep", "endPercent", "icon", "iconcolor", "iconsize", "border", "startdegree", "bordersize"]; 
 

 
      var customSettingsObj = {}; 
 
      var icon = ''; 
 
      var endPercent = 0; 
 
      var obj = $(this); 
 
      var fill = false; 
 
      var text, info; 
 

 
      obj.addClass('circliful'); 
 

 
      checkDataAttributes(obj); 
 

 
      if (obj.data('text') != undefined) { 
 
       text = obj.data('text'); 
 

 
       if (obj.data('icon') != undefined) { 
 
        icon = $('<i></i>') 
 
         .addClass('fa ' + $(this).data('icon')) 
 
         .css({ 
 
          'color': customSettingsObj.iconcolor, 
 
          'font-size': customSettingsObj.iconsize 
 
         }); 
 
       } 
 

 
       if (obj.data('type') != undefined) { 
 
        type = $(this).data('type'); 
 

 
        if (type == 'half') { 
 
         addCircleText(obj, 'circle-text-half', (customSettingsObj.dimension/1.45)); 
 
        } else { 
 
         addCircleText(obj, 'circle-text', customSettingsObj.dimension); 
 
        } 
 
       } else { 
 
        addCircleText(obj, 'circle-text', customSettingsObj.dimension); 
 
       } 
 
      } 
 

 
      if ($(this).data("total") != undefined && $(this).data("part") != undefined) { 
 
       var total = $(this).data("total")/parseFloat(100); 
 

 
       percent = (($(this).data("part")/total)/parseFloat(100)).toFixed(3); 
 
       endPercent = ($(this).data("part")/total).toFixed(3) 
 
      } else { 
 
       if ($(this).data("percent") != undefined) { 
 
        percent = $(this).data("percent")/parseFloat(100); 
 
        endPercent = $(this).data("percent") 
 
       } else { 
 
        percent = settings.percent/parseFloat(100) 
 
       } 
 
      } 
 

 
      if ($(this).data('info') != undefined) { 
 
       info = $(this).data('info'); 
 

 
       if ($(this).data('type') != undefined) { 
 
        type = $(this).data('type'); 
 

 
        if (type == 'half') { 
 
         addInfoText(obj, 0.9); 
 
        } else { 
 
         addInfoText(obj, 1.25); 
 
        } 
 
       } else { 
 
        addInfoText(obj, 1.25); 
 
       } 
 
      } 
 

 
      $(this).width(customSettingsObj.dimension + 'px'); 
 

 
      var canvas = $('<canvas></canvas>').attr({ 
 
       width: customSettingsObj.dimension, 
 
       height: customSettingsObj.dimension 
 
      }).appendTo($(this)).get(0); 
 

 
      var context = canvas.getContext('2d'); 
 
      var container = $(canvas).parent(); 
 
      var x = canvas.width/2; 
 
      var y = canvas.height/2; 
 
      var degrees = customSettingsObj.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 = customSettingsObj.animationstep === 0.0 ? endPercent : 0.0; 
 
      var curStep = Math.max(customSettingsObj.animationstep, 0.0); 
 
      var circ = Math.PI * 2; 
 
      var quart = Math.PI/2; 
 
      var type = ''; 
 
      var fireCallback = true; 
 
      var additionalAngelPI = (customSettingsObj.startdegree/180) * Math.PI; 
 

 
      if ($(this).data('type') != undefined) { 
 
       type = $(this).data('type'); 
 

 
       if (type == 'half') { 
 
        startAngle = 2.0 * Math.PI; 
 
        endAngle = 3.13; 
 
        circ = Math.PI; 
 
        quart = Math.PI/0.996; 
 
       } 
 
      } 
 
      
 
      /** 
 
      * adds text to circle 
 
      * 
 
      * @param obj 
 
      * @param cssClass 
 
      * @param lineHeight 
 
      */ 
 
      function addCircleText(obj, cssClass, lineHeight) { 
 
       $("<span></span>") 
 
        .appendTo(obj) 
 
        .addClass(cssClass) 
 
        .text(text) 
 
        .prepend(icon) 
 
        .css({ 
 
         'line-height': lineHeight + 'px', 
 
         'font-size': customSettingsObj.fontsize + 'px' 
 
        }); 
 
      } 
 

 
      /** 
 
      * adds info text to circle 
 
      * 
 
      * @param obj 
 
      * @param factor 
 
      */ 
 
      function addInfoText(obj, factor) { 
 
       $('<span></span>') 
 
        .appendTo(obj) 
 
        .addClass('circle-info-half') 
 
        .css(
 
         'line-height', (customSettingsObj.dimension * factor) + 'px' 
 
        ) 
 
        .text(info); 
 
      } 
 

 
      /** 
 
      * checks which data attributes are defined 
 
      * @param obj 
 
      */ 
 
      function checkDataAttributes(obj) { 
 
       $.each(customSettings, function (index, attribute) { 
 
        if (obj.data(attribute) != undefined) { 
 
         customSettingsObj[attribute] = obj.data(attribute); 
 
        } else { 
 
         customSettingsObj[attribute] = $(settings).attr(attribute); 
 
        } 
 

 
        if (attribute == 'fill' && obj.data('fill') != undefined) { 
 
         fill = true; 
 
        } 
 
       }); 
 
      } 
 

 
      /** 
 
      * animate foreground circle 
 
      * @param current 
 
      */ 
 
      function animate(current) { 
 

 
       context.clearRect(0, 0, canvas.width, canvas.height); 
 

 
       context.beginPath(); 
 
       context.arc(x, y, radius, endAngle, startAngle, false); 
 

 
       context.lineWidth = customSettingsObj.bordersize + 1; 
 

 
       context.strokeStyle = customSettingsObj.bgcolor; 
 
       context.stroke(); 
 

 
       if (fill) { 
 
        context.fillStyle = customSettingsObj.fill; 
 
        context.fill(); 
 
       } 
 

 
       context.beginPath(); 
 
       context.arc(x, y, radius, -(quart) + additionalAngelPI, ((circ) * current) - quart + additionalAngelPI, false); 
 

 
       if (customSettingsObj.border == 'outline') { 
 
        context.lineWidth = customSettingsObj.width + 13; 
 
       } else if (customSettingsObj.border == 'inline') { 
 
        context.lineWidth = customSettingsObj.width - 13; 
 
       } 
 

 
       context.strokeStyle = customSettingsObj.fgcolor; 
 
       context.stroke(); 
 

 
       if (curPerc < endPercent) { 
 
        curPerc += curStep; 
 
        requestAnimationFrame(function() { 
 
         animate(Math.min(curPerc, endPercent)/parseFloat(100)); 
 
        }, obj); 
 
       } 
 

 
       if (curPerc == endPercent && fireCallback && typeof(options) != "undefined") { 
 
        if ($.isFunction(options.complete)) { 
 
         options.complete(); 
 

 
         fireCallback = false; 
 
        } 
 
       } 
 
      } 
 

 
      animate(curPerc/parseFloat(100)); 
 

 
     }); 
 
    }; 
 
}(jQuery));
/* DEMO STYLES */ 
 
body { 
 
    max-width: 300px; 
 
    margin: 1em auto; 
 
    background: #db3a3d; 
 
    text-align:center; 
 
} 
 

 

 
/* PROGRESS CIRCLE COMPONENT */ 
 
.circliful { 
 
    margin:auto; 
 
    position: relative; 
 
} 
 

 
.circle-text, .circle-info, .circle-text-half, .circle-info-half { 
 
    width: 100%; 
 
    position: absolute; 
 
    text-align: center; 
 
    display: inline-block; 
 
} 
 

 
.circle-info, .circle-info-half { 
 
\t color: #999; 
 
} 
 

 
.circliful .fa { 
 
\t margin: -10px 3px 0 3px; 
 
\t position: relative; 
 
\t bottom: 4px; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script> 
 
<div class="well" style="background: #fff;"> 
 
    <h2>Progress Circle</h2> 
 
    <hr> 
 
    <div class="row"> 
 
    <div id="progress" data-dimension="200" data-text="65.5%" data-fontsize="36" data-percent="65.5" data-fgcolor="#30B455" data-bgcolor="#eee" data-width="15" data-bordersize="15" data-animationstep="2"></div> 
 
    </div> 
 
    
 
    <br> 
 
    <a class="btn btn-default" href="https://github.com/pguso/jquery-plugin-circliful" target="_blank"> 
 
     Circliful Docs <i class="glyphicon glyphicon-new-window"></i> 
 
    </a> 
 
</div>