亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

麻煩大神解釋下以下代碼中var timer=null為什么不能放在函數里面。

麻煩大神解釋下以下代碼中var timer=null為什么不能放在函數里面。

慕田峪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函數里面? ?function StarMove(iTarget) ? ?{ ? ? ? ?var odiv=document.getElementById('div1'); ? ? ? ?var timer=null; //放這里的運行結果有問題 ? ? ? ?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貢獻26條經驗 獲得超10個贊

Javascript中function代表的是對象, 你放在外面是全局變量,你要是想在里面使用,每次調用一次StartMove是不是timer就會初始化為null呢?當然就會出現問題了...

查看完整回答
反對 回復 2017-08-24
?
信者得救

TA貢獻22條經驗 獲得超10個贊

當timer=null放在外面的時候。全部setInterval,也就是每一次調用StarMove,共用一個timer變量來作原來定時器,clearInterval(timer)就可以清除掉之前的那一個定時器,再重新賦值給定時器。

當timer=null放在函數里面的時候。每一個,就是每一次onmouseover,調用函數StarMove時,都會新建一個var timer,然后再clearInterval(timer)就清除不了之前的定時器了。所以這時,每一次onmouseover時,都會疊加一個定時器。你就會看到方塊的速度變快了。

查看完整回答
反對 回復 2017-08-22
  • 慕田峪8701529
    慕田峪8701529
    把 var timer=null;放在 function StarMove(iTarget)里面運行結果不是速度變快了,而是一直在抖動。。。
  • 信者得救
    信者得救
    我想了一下你說的抖動,應該是因為你沒有設置*{margin:0;padding:0;}這樣在你設置定位的時候,設置了position:absolute;但又沒有設置left:0;這樣定位的時候就會是left:8px,top:8px,因為iSpeed為10,所以永遠到達不了0px。 你把鼠標從div1的左側移入你就會看到無論timer放在里還是外,都會抖動。 而你加上left:0;你就會發現無論怎樣都不會抖動。 再解釋一下為什么。 而從右側移入, 把timer放在外面的時候,onmouseover觸發,然后onmouseout馬上觸發,timer就會替換掉onmouseover時的那一個,所以就會移出屏幕。 而把timer放在里面時,就會產生兩個定時器。 兩個定時器都沒法到達終點,所以就會一直運行,所以就會抖動。
  • 慕田峪8701529
    慕田峪8701529
    好像有點道理,但是我還需要捋一捋思路,感謝~~
  • 2 回答
  • 1 關注
  • 2590 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號