OneMagic
2017-05-07 19:59
window.onload = function () { var oDiv = document.getElementById('div1'); oDiv.onmouseover = function () { startMove(7,0); } oDiv.onmouseout = function () { startMove(-10,-200); } } var timer = null; // 传参数的方法 function startMove(speed,iTarget) { var oDiv = document.getElementById('div1'); // 防止多次启用定时器 clearInterval(timer); // 添加一个定时器 timer = setInterval(function () { // 判断目标值 if (oDiv.offsetLeft === iTarget) { clearInterval(timer); } else { // 给当前位置的值加10 oDiv.style.left = oDiv.offsetLeft + speed + 'px'; } }, 30); }
回复 OneMagic:
if(flag == "start"){
if(oPanle.offsetLeft+oSpeed>=itarget){
oPanle.style.left = itarget+'px';
clearInterval(timer);
}else{
oPanle.style.left = oPanle.offsetLeft+oSpeed+'px';
}
}else if(flag == "stop"){
if(oPanle.offsetLeft+oSpeed<=itarget){
oPanle.style.left = itarget+'px';
clearInterval(timer);
}else{
oPanle.style.left = oPanle.offsetLeft+oSpeed+'px';
}
}
我在方法中加了一个flag用来表示开始还是停止,这个可以通过其他条件判断,我这样就是图方便。
你需要把当前位置的oDiv.offsetLeft值与itarget再做一次if判断,以你这个startMove(7,0);参数为例。if(oDiv.offsetLeft>itarget也就是0){oDiv.offsetLeft=itarget}这样目标就能够停下来了。相反,目标往左边移动也一样,if(oDiv.offsetLeft<target也就是-200){oDiv.offsetLeft=itarget}目标也停下来了
不是倍数肯定停不下来啊,oDiv.offsetLeft = 0 才能停下来,你每次加7,最后大于0,但不会等于0,所以就不停了啊
你可以console.log(oDiv.offsetLeft)这个值看一下。当你值不是倍数的时候,它是跳过iTarget这个的,所以用==来判断目标值是有bug的。
有一个解决方法就是判断oDiv.offsetLeft+oSpeed>=itarget,这个时候可以将itarget赋值给left。
oDiv.style.left = itarget+'px';
JS动画效果
113917 学习 · 1502 问题
相似问题