1/*! 2 * jquery.numscroll.js -- æ°åæ»å¨ç´¯å å¨ç»æä»¶ (Digital rolling cumulative animation) 3 * version 3.0.0 4 * 2019-08-08 5 * author: KevinTseng < [email protected]@qq.com > 6 * APIææ¡£: https://github.com/chaorenzeng/jquery.numscroll.js.git 7 * 交æµQ群: 814798690 8 */ 9 10(function($) { 11 12 $.fn.numScroll = function(options) { 13 var settings = $.extend({ 14 'number': '0', //æ°å¼ 15 'step': 1, //æ¥é¿ 16 'time': 2000, //éå¶ç¨æ¶(为0æ¶ä¸éå¶) Limited use time (0 time is not limited) 17 'delay': 0, //å»¶è¿å¼å§(ms) delay(ms) 18 'symbol': false ,//æ¯å¦æ¾ç¤ºåé符 display separators 19 'fromZero': true, //æ¯å¦ä»0å¼å§è®¡æ°ï¼ä¸ºå¦æ¶ä»åæå¼å¼å§è®¡æ°ï¼ Whether to start counting from zero(If not, count from the original value) 20 }, options); 21 settings.number = settings.number.toString(); //æ°å¼è½¬å符串 22 23 return this.each(function(){ 24 //åå§åé ç½® 25 var $this = $(this), 26 oldNum = $this.text() || '0'; 27 //åé符æ¾ç¤ºå¤æ 28 if (settings.number.indexOf(',') > 0) { 29 //æ°å¼å«æåé符ï¼åé»è®¤ä¸ºéè¦æ¾ç¤ºåé符 30 settings.symbol = true; 31 } 32 if (options && options.symbol===false) { 33 //æå¨è®¾ç½®ä¸æ¾ç¤ºåé符æ¶ï¼ä¸æ¾ç¤ºåé符 34 settings.symbol = false; 35 } 36 //æ¾ç¤ºåå§å¼ 37 var targetNum = settings.number.replace(/,/g, '') || 0, 38 oldRealNum = oldNum.replace(/,/g, ''); 39 if(settings.symbol){ 40 $this.text(oldNum); 41 }else{ 42 $this.text(oldRealNum); 43 } 44 //夿ä»0å¼å§è®¡æ°æä»åæå¼å¼å§è®¡æ° 45 if (settings.fromZero) { 46 oldRealNum = 0; 47 } 48 //éæ°å¼å¤ç 49 if(isNaN(oldRealNum)){ 50 oldRealNum = 0; 51 } 52 if(isNaN(targetNum)){ 53 return; 54 } 55 //åå§å¼ç®æ å¼åå¤ 56 targetNum = parseFloat(targetNum); 57 oldRealNum= parseFloat(oldRealNum); 58 var tempNum = oldRealNum, 59 numIsInt = isInt(targetNum), 60 numIsFloat = isFloat(targetNum), 61 step = !settings.time?1:Math.abs(targetNum-oldRealNum) * 10 / settings.time, 62 numScroll; 63 //æ´æ°æ¹æ³ 64 function numInitUpdate() { 65 var showNum = ''; 66 //æ´åææµ®ç¹å 67 if (numIsInt) { 68 showNum = Math.floor(tempNum); 69 } else if (numIsFloat != -1) { 70 showNum = tempNum.toFixed(numIsFloat) 71 } else { 72 showTarget(targetNum); 73 clearInterval(numScroll); 74 return; 75 } 76 //åä½ç¬¦æ¾ç¤º 77 if (settings.symbol) { 78 showNum = formatSymbol(showNum); 79 } 80 $this.text(showNum); 81 } 82 83 //æç»æ¾ç¤º 84 function showTarget(num) { 85 var targetNum = num.toString().replace(/,/g, ''); 86 if (settings.symbol) { 87 targetNum = formatSymbol(targetNum); 88 } 89 $this.text(targetNum); 90 } 91 92 //宿¶å¼å§ 93 setTimeout(function() { 94 numScroll = setInterval(function() { 95 numInitUpdate(); 96 if(oldRealNum < targetNum){ 97 //å¢ 98 tempNum += step; 99 if (tempNum > targetNum) { 100 showTarget(targetNum); 101 clearInterval(numScroll); 102 } 103 }else{ 104 //å 105 tempNum -= step; 106 if (tempNum < targetNum) { 107 showTarget(targetNum); 108 clearInterval(numScroll); 109 } 110 } 111 }, 1); 112 }, settings.delay); 113 114 }) 115 }; 116 117 /*
118 * 夿æ°å¼æ¯å¦ä¸ºæ´æ° 119 * @param num {Number} æ°å¼ 120 * @return {Boolean} çå 121 */ 122 function isInt(num) { 123 var res = false; 124 try { 125 if (String(num).indexOf(".") == -1 && String(num).indexOf(",") == -1) { 126 res = parseInt(num) % 1 === 0 ? true : false; 127 } 128 } catch (e) { 129 res = false; 130 } 131 return res; 132 } 133 134 /* 135 * 夿æ°å¼æ¯å¦ä¸ºå°æ° 136 * @param num {Number} æ°å¼ 137 * @return {Number} å°æ°ä½æ°(-1æ¶ä¸æ¯å°æ°) 138 */ 139 function isFloat(num) { 140 var res = -1; 141 try { 142 if (String(num).indexOf(".") != -1) { 143 var index = String(num).indexOf(".") + 1; //è·åå°æ°ç¹çä½ç½® 144 var count = String(num).length - index; //è·åå°æ°ç¹åçä¸ªæ° 145 if (index > 0) { 146 res = count; 147 } 148 } 149 } catch (e) { 150 res = -1; 151 } 152 return res; 153 } 154 155 /* 156 * æ¾ç¤ºæ°å¼ååä½åé符 157 * @param num {Number} æ°å¼ 158 * @return {String} å«åé符æ°å¼ 159 */ 160 function formatSymbol(num) { 161 var res = ''; 162 var str = num + '', 163 strLeft = '', 164 strRight = ''; 165 var floatNum = isFloat(num); 166 if (floatNum != -1) { 167 //æå°æ°æ¶è¿è¡åå² 168 var splitStr = str.split('.'); 169 strLeft = splitStr[0]; 170 strRight = splitStr[1]; 171 } else { 172 strLeft = str; 173 } 174 //æ´æ°é¨åæ¯é3使·»å åé符 175 res = strLeft.split("").reverse().reduce(function(prev, next, index) { 176 return ((index % 3) ? next : (next + ',')) + prev; 177 }) 178 //æ¼æ¥å°æ°é¨å 179 if (strRight != '') { 180 res = res + '.' + strRight; 181 } 182 return res; 183 } 184})(jQuery);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.