6
據瞭解,scroll
事件可以通過使用鼠標滾輪,單擊滾動條箭頭或動態使用window.scrollTo(left, top)
函數來觸發。確定導致滾動事件觸發的原因
是否可以確定是什麼導致scroll
事件觸發?無論是用戶干預還是JS代碼?
據瞭解,scroll
事件可以通過使用鼠標滾輪,單擊滾動條箭頭或動態使用window.scrollTo(left, top)
函數來觸發。確定導致滾動事件觸發的原因
是否可以確定是什麼導致scroll
事件觸發?無論是用戶干預還是JS代碼?
我不認爲你可以確定是什麼導致了滾動。滾動事件僅指示窗口正在滾動,而不是爲什麼滾動。
但是,也許您在從代碼調用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
}
}
這是不漂亮,但它應該工作
最近使用了這樣的東西,我可以保證,它實際上工作得很好。我正在嘗試檢測滾動事件是否在補間中間時來自用戶。我使用了greensock的'onUpdate()'時間軸函數,並發現如果我在該函數中設置了一個標誌,那麼滾動監聽器就會很好。然後你只需重置標誌。如果用戶中斷滾動,該標誌將不會被設置,您可以殺死您的動畫... – newshorts