var isTop = true; window.onscroll=function(){ if (!isTop) { clearInterval(time); }; isTop= false; } 這段代碼表示沒看懂,哪位朋友能幫我指點一二啊
var isTop = true; window.onscroll=function(){ if (!isTop) { clearInterval(time); }; isTop= false; } 這段代碼表示沒看懂,哪位朋友能幫我指點一二啊
2014-05-08
舉報
2014-05-11
首先你點擊回到頂部時,滾動條開始往回滾,這時候istop為true,因為滾動條滾動觸發window.onscroll 事件,!istop為false不執行clearInterval(timer);但是下面的isTop=false;再將isTop置為false。這時候你人為滾動鼠標,則再次觸發window.onscroll 事件,此時!istop為true 執行clearInterval(timer);則滾動條停下來
2015-02-04
我不同意一樓的答案,因為window.scroll是連續執行多次的
測試方法:
執行效果就是:
每50ms執行一次滾動,但是一滾動就會停止,說明window.scroll是執行多次的。
接下來分析代碼
實際的執行順序:
1.執行setInterval事件,由于有isTop=true,所以當執行下一次scroll的時候,isTop是ture
2.執行onscroll,先執行if(!isTop)判斷,然后在給isTop 賦值 false,重復執行1
3.當有人為滾動,重復執行2,(此時因為isTop 賦值為false,故if(!isTop) 是,結果為真,即執行clear操作),此時isTop 應為false
證明:
執行結果(我向下滾動,前面的4代表執行了4次if判斷)
2014-10-05
下面的isTop=false;再將isTop置為false,這時候人為滾動鼠標和下面的定時器都同時還在運行吧,為什么不是在這在之前定時器先把isTop置為true呢,怎么可以通過人為滾動鼠標就直接認定isTop=false,而不用再經過下面的定時器isTop=true,畢竟它是{ if (!isTop) { clearInterval(time); }; isTop= false; } ,而不是{ isTop= false; if (!isTop) { clearInterval(time); };} 求解
2014-05-09
意思就是只有當滾動條到達頂部的時候才取消定時器,取消定時器后就不會出現滑到中間強行向上的情況。這里的isTop=false 還有定時器里的isTop=true就是保證在沒滾動到頂端前定時器不被取消,就是連續滾的意思。我也是初學者,說的比較啰嗦,不知道對不對,希望相互學習