第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

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

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

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

慕田峪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)問題了...

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

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時,都會疊加一個定時器。你就會看到方塊的速度變快了。

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

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號