为了账号安全,请及时绑定邮箱和手机立即绑定

为什么速度值只能是目标值的倍数 如果不是则就停不下来了

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);
}

正在回答

4 回答

回复 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用来表示开始还是停止,这个可以通过其他条件判断,我这样就是图方便。



0 回复 有任何疑惑可以回复我~
#1

OneMagic 提问者

我明天用电脑看看 谢谢你
2017-05-08 回复 有任何疑惑可以回复我~

你需要把当前位置的oDiv.offsetLeft值与itarget再做一次if判断,以你这个startMove(7,0);参数为例。if(oDiv.offsetLeft>itarget也就是0){oDiv.offsetLeft=itarget}这样目标就能够停下来了。相反,目标往左边移动也一样,if(oDiv.offsetLeft<target也就是-200){oDiv.offsetLeft=itarget}目标也停下来了

0 回复 有任何疑惑可以回复我~

不是倍数肯定停不下来啊,oDiv.offsetLeft = 0 才能停下来,你每次加7,最后大于0,但不会等于0,所以就不停了啊

1 回复 有任何疑惑可以回复我~

你可以console.log(oDiv.offsetLeft)这个值看一下。当你值不是倍数的时候,它是跳过iTarget这个的,所以用==来判断目标值是有bug的。

有一个解决方法就是判断oDiv.offsetLeft+oSpeed>=itarget,这个时候可以将itarget赋值给left。

oDiv.style.left = itarget+'px';

0 回复 有任何疑惑可以回复我~
#1

OneMagic 提问者

oDiv.offsetLeft+oSpeed>=目标值是什么意思
2017-05-07 回复 有任何疑惑可以回复我~
#2

OneMagic 提问者

如果做这个判断的话oDiv.offsetLeft+speed>=itarget 鼠标移开的递减就不行了就不会缩回去了。你能贴下你解决BUG的代码出来我看看吗 谢谢
2017-05-07 回复 有任何疑惑可以回复我~

举报

0/150
提交
取消

为什么速度值只能是目标值的倍数 如果不是则就停不下来了

我要回答 关注问题
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号