亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 編程 > JavaScript > 正文

JS實現環形進度條(從0到100%)效果

2019-11-20 09:33:21
字體:
來源:轉載
供稿:網友

最近公司項目中要用到這種類似環形進度條的效果,初始就從0開始動畫到100%結束。動畫結果始終會停留在100%上,并不會到因為數據的關系停留在一半。

如圖

代碼如下

demo.html

<!doctype html><html lang="zh"><head><meta charset="UTF-8"><meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> <meta name="viewport" content="width=device-width, initial-scale=1.0"><title>demo</title><style>.rad-prg{position: relative;}.rad-con{position: absolute;z-index: 1;top:0;left: 0;text-align: center;width:90px;height: 90px;padding: 10px;font-family: "microsoft yahei";}</style></head><body><div class="prg-cont rad-prg" id="indicatorContainer"><div class="rad-con"><p>¥4999</p><p>賬戶總覽</p></div></div><script type="text/javascript" src="js/jquery.min.js"></script><script src="js/radialIndicator.js"></script><script>$('#indicatorContainer').radialIndicator({barColor: '#007aff',barWidth: 5,initValue: 0,roundCorner : true,percentage: true,displayNumber: false,radius: 50});setTimeout(function(){var radObj = $('#indicatorContainer2').data('radialIndicator');radObj.animate(100);},300);</script></body></html>

radialIndicator.js 這是jquery的插件

/*radialIndicator.js v 1.0.0Author: Sudhanshu YadavCopyright (c) 2015 Sudhanshu Yadav - ignitersworld.com , released under the MIT license.Demo on: ignitersworld.com/lab/radialIndicator.html*/;(function ($, window, document) {"use strict";//circumfence and quart value to start bar from topvar circ = Math.PI * 2,quart = Math.PI / 2;//function to convert hex to rgbfunction hexToRgb(hex) {// Expand shorthand form (e.g. "03F") to full form (e.g. "0033FF")var shorthandRegex = /^#?([a-f/d])([a-f/d])([a-f/d])$/i;hex = hex.replace(shorthandRegex, function (m, r, g, b) {return r + r + g + g + b + b;});var result = /^#?([a-f/d]{2})([a-f/d]{2})([a-f/d]{2})$/i.exec(hex);return result ? [parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)] : null;}function getPropVal(curShift, perShift, bottomRange, topRange) {return Math.round(bottomRange + ((topRange - bottomRange) * curShift / perShift));}//function to get current color in case of function getCurrentColor(curPer, bottomVal, topVal, bottomColor, topColor) {var rgbAryTop = topColor.indexOf('#') != -1 ? hexToRgb(topColor) : topColor.match(//d+/g),rgbAryBottom = bottomColor.indexOf('#') != -1 ? hexToRgb(bottomColor) : bottomColor.match(//d+/g),perShift = topVal - bottomVal,curShift = curPer - bottomVal;if (!rgbAryTop || !rgbAryBottom) return null;return 'rgb(' + getPropVal(curShift, perShift, rgbAryBottom[0], rgbAryTop[0]) + ',' + getPropVal(curShift, perShift, rgbAryBottom[1], rgbAryTop[1]) + ',' + getPropVal(curShift, perShift, rgbAryBottom[2], rgbAryTop[2]) + ')';}//to merge objectfunction merge() {var arg = arguments,target = arg[0];for (var i = 1, ln = arg.length; i < ln; i++) {var obj = arg[i];for (var k in obj) {if (obj.hasOwnProperty(k)) {target[k] = obj[k];}}}return target;}//function to apply formatting on number depending on parameterfunction formatter(pattern) {return function (num) {if(!pattern) return num.toString();num = num || 0var numRev = num.toString().split('').reverse(),output = pattern.split("").reverse(),i = 0,lastHashReplaced = 0;//changes hash with numbersfor (var ln = output.length; i < ln; i++) {if (!numRev.length) break;if (output[i] == "#") {lastHashReplaced = i;output[i] = numRev.shift();}}//add overflowing numbers before prefixoutput.splice(lastHashReplaced+1, output.lastIndexOf('#') - lastHashReplaced, numRev.reverse().join(""));return output.reverse().join('');}}//circle bar classfunction Indicator(container, indOption) {indOption = indOption || {};indOption = merge({}, radialIndicator.defaults, indOption);this.indOption = indOption;//create a queryselector if a selector string is passed in containerif (typeof container == "string")container = document.querySelector(container);//get the first element if container is a node listif (container.length)container = container[0];this.container = container;//create a canvas elementvar canElm = document.createElement("canvas");container.appendChild(canElm);this.canElm = canElm; // dom object where drawing will happenthis.ctx = canElm.getContext('2d'); //get 2d canvas context//add intial value this.current_value = indOption.initValue || indOption.minValue || 0;}Indicator.prototype = {constructor: radialIndicator,init: function () {var indOption = this.indOption,canElm = this.canElm,ctx = this.ctx,dim = (indOption.radius + indOption.barWidth) * 2, //elm width and heightcenter = dim / 2; //center point in both x and y axis//create a formatter functionthis.formatter = typeof indOption.format == "function" ? indOption.format : formatter(indOption.format);//maximum text length;this.maxLength = indOption.percentage ? 4 : this.formatter(indOption.maxValue).length;canElm.width = dim;canElm.height = dim;//draw a grey circlectx.strokeStyle = indOption.barBgColor; //background circle colorctx.lineWidth = indOption.barWidth;ctx.beginPath();ctx.arc(center, center, indOption.radius, 0, 2 * Math.PI);ctx.stroke();//store the image data after grey circle drawthis.imgData = ctx.getImageData(0, 0, dim, dim);//put the initial value if definedthis.value(this.current_value);return this;},//update the value of indicator without animationvalue: function (val) {//return the val if val is not providedif (val === undefined || isNaN(val)) {return this.current_value;}val = parseInt(val);var ctx = this.ctx,indOption = this.indOption,curColor = indOption.barColor,dim = (indOption.radius + indOption.barWidth) * 2,minVal = indOption.minValue,maxVal = indOption.maxValue,center = dim / 2;//limit the val in range of 0 to 100val = val < minVal ? minVal : val > maxVal ? maxVal : val;var perVal = Math.round(((val - minVal) * 100 / (maxVal - minVal)) * 100) / 100, //percentage value tp two decimal precisiondispVal = indOption.percentage ? perVal + '%' : this.formatter(val); //formatted value//save val on objectthis.current_value = val;//draw the bg circlectx.putImageData(this.imgData, 0, 0);//get current color if color range is setif (typeof curColor == "object") {var range = Object.keys(curColor);for (var i = 1, ln = range.length; i < ln; i++) {var bottomVal = range[i - 1],topVal = range[i],bottomColor = curColor[bottomVal],topColor = curColor[topVal],newColor = val == bottomVal ? bottomColor : val == topVal ? topColor : val > bottomVal && val < topVal ? indOption.interpolate ? getCurrentColor(val, bottomVal, topVal, bottomColor, topColor) : topColor : false;if (newColor != false) {curColor = newColor;break;}}}//draw th circle valuectx.strokeStyle = curColor;//add linecap if value setted on optionsif (indOption.roundCorner) ctx.lineCap = "round";ctx.beginPath();ctx.arc(center, center, indOption.radius, -(quart), ((circ) * perVal / 100) - quart, false);ctx.stroke();//add percentage textif (indOption.displayNumber) {var cFont = ctx.font.split(' '),weight = indOption.fontWeight,fontSize = indOption.fontSize || (dim / (this.maxLength - (Math.floor(this.maxLength*1.4/4)-1)));cFont = indOption.fontFamily || cFont[cFont.length - 1];ctx.fillStyle = indOption.fontColor || curColor;ctx.font = weight +" "+ fontSize + "px " + cFont;ctx.textAlign = "center";ctx.textBaseline = 'middle';ctx.fillText(dispVal, center, center);}return this;},//animate progressbar to the valueanimate: function (val) {var indOption = this.indOption,counter = this.current_value || indOption.minValue,self = this,incBy = Math.ceil((indOption.maxValue - indOption.minValue) / (indOption.frameNum || (indOption.percentage ? 100 : 500))), //increment by .2% on every tick and 1% if showing as percentageback = val < counter;//clear interval function if already startedif (this.intvFunc) clearInterval(this.intvFunc); this.intvFunc = setInterval(function () {if ((!back && counter >= val) || (back && counter <= val)) {if (self.current_value == counter) {clearInterval(self.intvFunc);return;} else {counter = val;}}self.value(counter); //dispaly the valueif (counter != val) {counter = counter + (back ? -incBy : incBy)}; //increment or decrement till counter does not reach to value}, indOption.frameTime);return this;},//method to update optionsoption: function (key, val) {if (val === undefined) return this.option[key];if (['radius', 'barWidth', 'barBgColor', 'format', 'maxValue', 'percentage'].indexOf(key) != -1) {this.indOption[key] = val;this.init().value(this.current_value);}this.indOption[key] = val;}};/** Initializer function **/function radialIndicator(container, options) {var progObj = new Indicator(container, options);progObj.init();return progObj;}//radial indicator defaultsradialIndicator.defaults = {radius: 50, //inner radius of indicatorbarWidth: 5, //bar widthbarBgColor: '#eeeeee', //unfilled bar colorbarColor: '#99CC33', //filled bar color , can be a range also having different colors on different value like {0 : "#ccc", 50 : '#333', 100: '#000'}format: null, //format indicator numbers, can be a # formator ex (##,###.##) or a functionframeTime: 10, //miliseconds to move from one frame to anotherframeNum: null, //Defines numbers of frame in indicator, defaults to 100 when showing percentage and 500 for other valuesfontColor: null, //font colorfontFamily: null, //defines font familyfontWeight: 'bold', //defines font weightfontSize : null, //define the font size of indicator numberinterpolate: true, //interpolate color between rangespercentage: false, //show percentage of valuedisplayNumber: true, //display indicator numberroundCorner: false, //have round corner in filled barminValue: 0, //minimum valuemaxValue: 100, //maximum valueinitValue: 0 //define initial value of indicator};window.radialIndicator = radialIndicator;//add as a jquery pluginif ($) {$.fn.radialIndicator = function (options) {return this.each(function () {var newPCObj = radialIndicator(this, options);$.data(this, 'radialIndicator', newPCObj);});};}}(window.jQuery, window, document, void 0));

以上所述是小編給大家介紹的JS實現環形進度條(從0到100%)效果 ,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復大家的。在此也非常感謝大家對武林網網站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品18久久久久久麻辣| 中文在线资源观看视频网站免费不卡| 国产日韩av在线| 亚洲理论电影网| 日韩免费观看网站| 欧美激情视频一区二区三区不卡| 亚洲欧美一区二区三区久久| 欧美大秀在线观看| 91精品国产91久久久久久不卡| 亚洲色图校园春色| 亚洲自拍偷拍第一页| 精品国产鲁一鲁一区二区张丽| 成人欧美一区二区三区黑人孕妇| 中文字幕在线视频日韩| 国产视频亚洲精品| 97精品国产97久久久久久免费| 深夜福利日韩在线看| 国产精品免费一区豆花| 亚洲精品国产福利| 96sao精品视频在线观看| 91中文字幕在线| 国产91免费观看| 精品福利在线视频| 色综合亚洲精品激情狠狠| 国产不卡视频在线| 欧美精品www| 国产精品视频中文字幕91| 欧美亚洲视频在线看网址| 日韩美女在线观看| 欧美日韩另类视频| 91免费在线视频| 国产精品欧美亚洲777777| 亚洲色图欧美制服丝袜另类第一页| 久久亚洲综合国产精品99麻豆精品福利| 亚洲色在线视频| 91国语精品自产拍在线观看性色| 中文字幕久热精品视频在线| 中文字幕自拍vr一区二区三区| 97人人模人人爽人人喊中文字| 国产999精品久久久影片官网| 国产精品自拍视频| 日韩成人激情在线| 色偷偷av一区二区三区乱| 欧美成人一区在线| 欧美电影在线观看完整版| 精品久久国产精品| 一本一本久久a久久精品综合小说| 久久久久久久久亚洲| 91香蕉国产在线观看| 欧美精品激情在线| 亚洲精品自产拍| 在线丨暗呦小u女国产精品| 欧美大奶子在线| 久久国产天堂福利天堂| 久久精品成人欧美大片| 欧美亚洲国产日本| 欧美一级成年大片在线观看| 日韩精品极品在线观看播放免费视频| 亚洲性线免费观看视频成熟| 亚洲激情视频在线播放| 欧美性xxxxx极品| 久久久久久这里只有精品| 亚洲精品美女网站| 欧美xxxx做受欧美| 中文字幕日韩综合av| 日韩成人久久久| 日韩欧美国产激情| 中文字幕不卡av| 亚洲www在线| 欧洲成人在线观看| 久久亚洲国产精品成人av秋霞| 成人午夜黄色影院| 亚洲一区二区久久久久久久| 日本一区二区三区四区视频| 亚洲综合色激情五月| 国产欧美 在线欧美| 97精品伊人久久久大香线蕉| 成人中文字幕在线观看| 亚洲区一区二区| 亚洲欧洲日韩国产| 日本高清视频一区| 97视频在线看| 亚洲偷熟乱区亚洲香蕉av| 亚洲国产成人在线视频| 91精品国产高清久久久久久91| 国产精品直播网红| 成人综合网网址| 欧美日韩精品在线播放| 国产精品日韩在线| 国产精品视频精品| 亚洲美女视频网| 欧洲美女7788成人免费视频| 亚州国产精品久久久| 欧美久久精品一级黑人c片| 亚洲欧美资源在线| 日韩国产高清污视频在线观看| 国产精品久久久| www.久久久久| 亚洲女人天堂网| 亚洲韩国欧洲国产日产av| 国产亚洲一区二区在线| 国产精品草莓在线免费观看| 国产美女被下药99| 一区二区三欧美| 中文字幕精品久久久久| 亚洲电影免费观看高清完整版在线观看| 亚洲男人天堂九九视频| 在线观看国产成人av片| 欧美黑人巨大精品一区二区| 国产精品69精品一区二区三区| 性色av一区二区三区红粉影视| 亚洲国产欧美一区二区丝袜黑人| 国产精品扒开腿做爽爽爽视频| 在线观看国产欧美| 国产精品麻豆va在线播放| 欧美激情高清视频| 91精品国产网站| 国产精品一久久香蕉国产线看观看| 伊人久久久久久久久久久| 国产精品福利观看| 亚洲欧美日韩另类| 国产精品亚洲аv天堂网| 狠狠躁夜夜躁人人躁婷婷91| 欧美一区二区三区免费视| 91po在线观看91精品国产性色| 日韩电影在线观看中文字幕| 成人做爰www免费看视频网站| 国产激情综合五月久久| 影音先锋日韩有码| 92看片淫黄大片欧美看国产片| 国产精品视频免费观看www| 亚洲精品电影在线| 中文字幕欧美亚洲| 成人精品网站在线观看| 国产一区二区三区三区在线观看| 亚洲韩国日本中文字幕| 激情久久av一区av二区av三区| 91久久久久久久久| 亚洲精品一区在线观看香蕉| 欧美大胆a视频| 久久99热精品这里久久精品| 国产亚洲精品久久久久久| 日韩视频永久免费观看| 久久久久久久电影一区| 国产精品日韩在线一区| 亚洲一区久久久| 日韩av中文字幕在线播放| 91高清在线免费观看| 亚洲美女在线视频| 成人激情综合网| 日韩av在线导航| 96pao国产成视频永久免费| 91精品免费久久久久久久久| 亚洲自拍偷拍色图| 亚洲美女视频网| 国产精品一区二区三区久久| 成人性生交大片免费看视频直播| 精品久久久久久电影| 高潮白浆女日韩av免费看| 欧美日韩免费区域视频在线观看| 久久精品成人欧美大片| 欧美午夜女人视频在线| 中文字幕精品视频| 亚洲免费影视第一页|