慕田峪8701529
2017-08-22 09:26:48
<script> ? ?window.onload=function () ? ?{ ? ? ? ?var odiv=document.getElementById('div1'); ? ? ? ?odiv.onmouseover=function () ? ? ? ?{ ? ? ? ? ? ?StarMove(0); ? ? ? ?} ? ? ? ?odiv.onmouseout=function () ? ? ? ?{ ? ? ? ? ? ?StarMove(-100); ? ? ? ?} ? ?}//var timer=null; ?timer為什么一定要放在這里,而不能放在starmove函數(shù)里面? ?function StarMove(iTarget) ? ?{ ? ? ? ?var odiv=document.getElementById('div1'); ? ? ? ?var timer=null; //放這里的運行結(jié)果有問題 ? ? ? ?clearInterval(timer); ? ? ? ?timer=setInterval(function (){ ? ? ? ? ? ?var iSpeed=0; ? ? ? ? ? ?if(odiv.offsetLeft<iTarget) ? ? ? ? ? ?{ ? ? ? ? ? ? ? ?iSpeed=10; ? ? ? ? ? ?} ? ? ? ? ? ?else ? ? ? ? ? ?{ ? ? ? ? ? ? ? ?iSpeed=-10; ? ? ? ? ? ?} ? ? ? ? ? ?if(odiv.offsetLeft==iTarget) ? ? ? ? ? ?{ ? ? ? ? ? ? ? ?clearInterval(timer); ? ? ? ? ? ?} ? ? ? ? ? ?else ? ? ? ? ? ?{ ? ? ? ? ? ? ? ?odiv.style.left=odiv.offsetLeft+iSpeed+'px'; ? ? ? ? ? ?} ? ? ? ?}, 30); ? ?}
2 回答

Jaydon_
TA貢獻(xiàn)26條經(jīng)驗 獲得超10個贊
Javascript中function代表的是對象, 你放在外面是全局變量,你要是想在里面使用,每次調(diào)用一次StartMove是不是timer就會初始化為null呢?當(dāng)然就會出現(xiàn)問題了...

信者得救
TA貢獻(xiàn)22條經(jīng)驗 獲得超10個贊
當(dāng)timer=null放在外面的時候。全部setInterval,也就是每一次調(diào)用StarMove,共用一個timer變量來作原來定時器,clearInterval(timer)就可以清除掉之前的那一個定時器,再重新賦值給定時器。
當(dāng)timer=null放在函數(shù)里面的時候。每一個,就是每一次onmouseover,調(diào)用函數(shù)StarMove時,都會新建一個var timer,然后再clearInterval(timer)就清除不了之前的定時器了。所以這時,每一次onmouseover時,都會疊加一個定時器。你就會看到方塊的速度變快了。
添加回答
舉報
0/150
提交
取消