2017-10-16 7 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>