缓冲运动怎样达到目标值?

写了一个物体缓冲运动的demo,但是不能到达目标值,求解!

function move(idname, speed, target) {
            clearInterval(timer);
            var box = document.getElementById(idname);
            timer = setInterval(function(){
                var v = (target-box.offsetLeft)/speed;
                v = v > 0 ? Math.ceil(v):Math.floor(v);
                if (parseInt(box.style.left) == target) {
                    
                    clearInterval(timer);
                } else {
                    box.style.left = box.offsetLeft + v + 'px'; 
                }
            }, 30)
        }
box.onmouseover = function() {
                move('box', 20, 500);
            }

图片描述

为什么是left值是633px?

阅读 1.6k
1 个回答

你的判断条件有问题,并不是运动的结果每次都会恰好等于目标值,这之间会存在误差,可能会少,可能会多,当处于某个值之后会发生v在正负之间来回摆动的问题,所以判断的条件应该是v的绝对值与目标和实际误差绝对值的比较。另外建议变量名与实际相符。
以上。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题