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动画效果
113910 学习 · 1502 问题
相似问题