本篇文章為大家展示了使用CountUp.js怎么實(shí)現(xiàn)一個(gè)數(shù)字滾動(dòng)增值效果,內(nèi)容簡(jiǎn)明扼要并且容易理解,絕對(duì)能使你眼前一亮,通過(guò)這篇文章的詳細(xì)介紹希望你能有所收獲。
成都創(chuàng)新互聯(lián)公司堅(jiān)持“要么做到,要么別承諾”的工作理念,服務(wù)領(lǐng)域包括:網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣等服務(wù),滿足客戶于互聯(lián)網(wǎng)時(shí)代的荔灣網(wǎng)站設(shè)計(jì)、移動(dòng)媒體設(shè)計(jì)的需求,幫助企業(yè)找到有效的互聯(lián)網(wǎng)解決方案。努力成為您成熟可靠的網(wǎng)絡(luò)建設(shè)合作伙伴!js文件
var CountUp = function (target, startVal, endVal, decimals, duration, options) { var self = this self.version = function () { return '1.9.3' } // default options self.options = { useEasing: true, // toggle easing useGrouping: true, // 1,000,000 vs 1000000 separator: ',', // character to use as a separator decimal: '.', // character to use as a decimal easingFn: easeOutExpo, // optional custom easing function, default is Robert Penner's easeOutExpo formattingFn: formatNumber, // optional custom formatting function, default is formatNumber above prefix: '', // optional text before the result suffix: '', // optional text after the result numerals: [] // optionally pass an array of custom numerals for 0-9 } // extend default options with passed options object if (options && typeof options === 'object') { for (var key in self.options) { if (options.hasOwnProperty(key) && options[key] !== null) { self.options[key] = options[key] } } } if (self.options.separator === '') { self.options.useGrouping = false } else { // ensure the separator is a string (formatNumber assumes this) self.options.separator = '' + self.options.separator } // make sure requestAnimationFrame and cancelAnimationFrame are defined // polyfill for browsers without native support // by Opera engineer Erik Möller var lastTime = 0 var vendors = ['webkit', 'moz', 'ms', 'o'] for (var x = 0; x < vendors.length && !window.requestAnimationFrame; ++x) { window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame'] window.cancelAnimationFrame = window[vendors[x] + 'CancelAnimationFrame'] || window[vendors[x] + 'CancelRequestAnimationFrame'] } if (!window.requestAnimationFrame) { window.requestAnimationFrame = function (callback, element) { var currTime = new Date().getTime() var timeToCall = Math.max(0, 16 - (currTime - lastTime)) var tesult = currTime + timeToCall var id = window.setTimeout(function () { callback(tesult) }, timeToCall) lastTime = currTime + timeToCall return id } } if (!window.cancelAnimationFrame) { window.cancelAnimationFrame = function (id) { clearTimeout(id) } } function formatNumber (num) { var neg = (num < 0) var x, x1, x2, x3, i, len num = Math.abs(num).toFixed(self.decimals) num += '' x = num.split('.') x1 = x[0] x2 = x.length > 1 ? self.options.decimal + x[1] : '' if (self.options.useGrouping) { x3 = '' for (i = 0, len = x1.length; i < len; ++i) { if (i !== 0 && ((i % 3) === 0)) { x3 = self.options.separator + x3 } x3 = x1[len - i - 1] + x3 } x1 = x3 } // optional numeral substitution if (self.options.numerals.length) { x1 = x1.replace(/[0-9]/g, function (w) { return self.options.numerals[+w] }) x2 = x2.replace(/[0-9]/g, function (w) { return self.options.numerals[+w] }) } return (neg ? '-' : '') + self.options.prefix + x1 + x2 + self.options.suffix } // Robert Penner's easeOutExpo function easeOutExpo (t, b, c, d) { return c * (-Math.pow(2, -10 * t / d) + 1) * 1024 / 1023 + b } function ensureNumber (n) { return (typeof n === 'number' && !isNaN(n)) } self.initialize = function () { if (self.initialized) return true self.error = '' self.d = (typeof target === 'string') ? document.getElementById(target) : target if (!self.d) { self.error = '[CountUp] target is null or undefined' return false } self.startVal = Number(startVal) self.endVal = Number(endVal) // error checks if (ensureNumber(self.startVal) && ensureNumber(self.endVal)) { self.decimals = Math.max(0, decimals || 0) self.dec = Math.pow(10, self.decimals) self.duration = Number(duration) * 1000 || 2000 self.countDown = (self.startVal > self.endVal) self.frameVal = self.startVal self.initialized = true return true } else { self.error = '[CountUp] startVal (' + startVal + ') or endVal (' + endVal + ') is not a number' return false } } // Print value to target self.printValue = function (value) { var result = self.options.formattingFn(value) if (self.d.tagName === 'INPUT') { this.d.value = result } else if (self.d.tagName === 'text' || self.d.tagName === 'tspan') { this.d.textContent = result } else { this.d.innerHTML = result } } self.count = function (timestamp) { if (!self.startTime) { self.startTime = timestamp } self.timestamp = timestamp var progress = timestamp - self.startTime self.remaining = self.duration - progress // to ease or not to ease if (self.options.useEasing) { if (self.countDown) { self.frameVal = self.startVal - self.options.easingFn(progress, 0, self.startVal - self.endVal, self.duration) } else { self.frameVal = self.options.easingFn(progress, self.startVal, self.endVal - self.startVal, self.duration) } } else { if (self.countDown) { self.frameVal = self.startVal - ((self.startVal - self.endVal) * (progress / self.duration)) } else { self.frameVal = self.startVal + (self.endVal - self.startVal) * (progress / self.duration) } } // don't go past endVal since progress can exceed duration in the last frame if (self.countDown) { self.frameVal = (self.frameVal < self.endVal) ? self.endVal : self.frameVal } else { self.frameVal = (self.frameVal > self.endVal) ? self.endVal : self.frameVal } // decimal self.frameVal = Math.round(self.frameVal * self.dec) / self.dec // format and print value self.printValue(self.frameVal) // whether to continue if (progress < self.duration) { self.rAF = requestAnimationFrame(self.count) } else { if (self.callback) self.callback() } } // start your animation self.start = function (callback) { if (!self.initialize()) return self.callback = callback self.rAF = requestAnimationFrame(self.count) } // toggles pause/resume animation self.pauseResume = function () { if (!self.paused) { self.paused = true cancelAnimationFrame(self.rAF) } else { self.paused = false delete self.startTime self.duration = self.remaining self.startVal = self.frameVal requestAnimationFrame(self.count) } } // reset to startVal so animation can be run again self.reset = function () { self.paused = false delete self.startTime self.initialized = false if (self.initialize()) { cancelAnimationFrame(self.rAF) self.printValue(self.startVal) } } // pass a new endVal and start animation self.update = function (newEndVal) { if (!self.initialize()) return newEndVal = Number(newEndVal) if (!ensureNumber(newEndVal)) { self.error = '[CountUp] update() - new endVal is not a number: ' + newEndVal return } self.error = '' if (newEndVal === self.frameVal) return cancelAnimationFrame(self.rAF) self.paused = false delete self.startTime self.startVal = self.frameVal self.endVal = newEndVal self.countDown = (self.startVal > self.endVal) self.rAF = requestAnimationFrame(self.count) } // format startVal on initialization if (self.initialize()) self.printValue(self.startVal) } module.exports = CountUp
index.html文件中需要進(jìn)入該插件,和jq插件,再進(jìn)行new實(shí)例化
var options = { useEasing: true, // 使用緩和效果 useGrouping: true, // 使用分組效果 separator: ',', // 分離器,數(shù)據(jù)夠三位,例如100,000 decimal: '.', // 小數(shù)點(diǎn)分割,例如:10.00 prefix: '', // 第一位默認(rèn)數(shù)字,例如:¥ suffix: '' // 最后一位默認(rèn)數(shù)字,例如:元,美元 } // new CountUp(target, startVal, endVal, decimals, duration, options) // target = 目標(biāo)元素的 ID // startVal = 開始值 // endVal = 結(jié)束值 // decimals = 小數(shù)位數(shù) 默認(rèn)值是0 // duration = 動(dòng)畫延遲秒數(shù),默認(rèn)值是2; // options = optional object of options (see below) var demo = new CountUp('extractionMoney', 0, data.balanceAmount, 2, 0.5, options) if (!demo.error) { demo.start() } else { console.error(demo.error) }
上述內(nèi)容就是使用CountUp.js怎么實(shí)現(xiàn)一個(gè)數(shù)字滾動(dòng)增值效果,你們學(xué)到知識(shí)或技能了嗎?如果還想學(xué)到更多技能或者豐富自己的知識(shí)儲(chǔ)備,歡迎關(guān)注創(chuàng)新互聯(lián)成都網(wǎng)站設(shè)計(jì)公司行業(yè)資訊頻道。
另外有需要云服務(wù)器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務(wù)器15元起步,三天無(wú)理由+7*72小時(shí)售后在線,公司持有idc許可證,提供“云服務(wù)器、裸金屬服務(wù)器、高防服務(wù)器、香港服務(wù)器、美國(guó)服務(wù)器、虛擬主機(jī)、免備案服務(wù)器”等云主機(jī)租用服務(wù)以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡(jiǎn)單易用、服務(wù)可用性高、性價(jià)比高”等特點(diǎn)與優(yōu)勢(shì),專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應(yīng)用場(chǎng)景需求。