requestAnimationFrame 与setTimeout 大概一致,
    requestAnimationFrame 每秒60帧 ,setTimeout与setInterval根据你自己的定义
    requestAnimationFrame 可以准时执行每一帧。setTimeout与setInterval会在上一帧动画执行完才会执行下一帧
    requestAnimationFrame 兼容性不是很好
    cancelAnimationFrame 基本相当于clearTimeout(),清除上是一样的,其机制不一样

    1. const box = document.getElementsByClassName('box')[0];
    2. let timer = null;
    3. function move() {
    4. if (box.offsetLeft > 700) {
    5. cancelAnimationFrame(timer);
    6. return;
    7. }
    8. box.style.left = box.offsetLeft + 20 + 'px';
    9. timer = requestAnimationFrame(move)
    10. }
    11. move()