using-requestAnimationFrame
  1. 实现数字从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)
       }
     }
    
  2. 实现数字从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)
    
  3. 实现数字从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()
    
文章作者: phoebe
文章链接: https://phoebecodespace.github.io/2019/01/07/using-requestAnimationFrame/
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 phoebe's blog