2011-08-09 89 views
6

據瞭解,scroll事件可以通過使用鼠標滾輪,單擊滾動條箭頭或動態使用window.scrollTo(left, top)函數來觸發。確定導致滾動事件觸發的原因

是否可以確定是什麼導致scroll事件觸發?無論是用戶干預還是JS代碼?

回答

5

我不認爲你可以確定是什麼導致了滾動。滾動事件僅指示窗口正在滾動,而不是爲什麼滾動。

但是,也許您在從代碼調用window.scrollTo()之前暫停滾動事件偵聽器或設置標誌。在這裏,在Safari瀏覽器,如果你使用scrollTo(),滾動事件僅觸發一次,無論你多麼滾動,所以你可以想見,做這樣的事情:

// somewhere in your code... 
isCodedScrollEvent = true; 
window.scrollTo(0, 200); 

// elsewhere in your code... 
function scrollListener(event) { 
    if(isCodedScrollEvent) { 
     // event was caused by code, so handle it differently 
     // and then flip the flag back to false, so the next 
     // will be handled normally again 
     isCodedScrollEvent = false; 
    } else { 
     // event was caused by user 
    } 
} 

這是不漂亮,但它應該工作

+0

最近使用了這樣的東西,我可以保證,它實際上工作得很好。我正在嘗試檢測滾動事件是否在補間中間時來自用戶。我使用了greensock的'onUpdate()'時間軸函數,並發現如果我在該函數中設置了一個標誌,那麼滾動監聽器就會很好。然後你只需重置標誌。如果用戶中斷滾動,該標誌將不會被設置,您可以殺死您的動畫... – newshorts

相關問題