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