using-requestAnimationFrame
实现数字从0增长,每帧增长1的速度,直到100
let startValue = 0; let endValue = 100 let request = null function animate () { startValue += 1 console.log(startValue) if (startValue >= endValue) { cancelAnimationFrame(request) } else { request = requestAnimationFrame(animate) } }
实现数字从0增长,匀速在2s内增加到100 (每秒50)
let startValue = 0 let endValue = 100 let request = null let starttime = new Date().getTime() const duration = 2000 function animate () { var timestamp = new Date().getTime() var runtime = timestamp - starttime var progress = runtime / duration progress = Math.min(progress, 1) startValue = (endValue * progress) console.log(startValue) if (runtime < duration) { // if duration not met yet requestAnimationFrame(animate) } else { cancelAnimationFrame(request) } } requestAnimationFrame(animate)
实现数字从0增长,按一定函数在2s内增加到100
const duration = 2000 let startValue = 0 let request = null let starttime = new Date().getTime() let endValue = 100 // cancelAnimationFrame(request) const animate = () => { request = window.requestAnimationFrame(animate) draw() } const draw = (timestamp = new Date().getTime()) => { const Linear = k => k const QuadraticIn = k => k * k const QuadraticOut = k => k * (2 - k) const CubicInOut = k => { if ((k *= 2) < 1) { return 0.5 * k * k * k } return 0.5 * ((k -= 2) * k * k + 2) } var runtime = timestamp - starttime var progress = runtime / duration progress = Math.min(progress, 1) startValue = CubicInOut(progress) * endValue console.log(startValue) if (startValue >= endValue) { cancelAnimationFrame(request) } } animate()