當前我的程序處於偵聽用戶滾動某個元素的位置,但有時也會自動自動滾動此元素。 (不是一個漸進的,漂亮的滾動,而是一個瞬間跳躍,這是有道理的,我發誓。)使「scrollLeft」/「scrollTop」更改不會觸發滾動事件偵聽器
有沒有辦法讓滾動事件不觸發,如果滾動是通過設置scrollLeft或scrollTop?我首先想到的是一個基本的開關,如:
ignoreScrollEvents = true;
element.scrollLeft = x;
ignoreScrollEvents = false;
function onScroll() {
if(ignoreScrollEvents) return false;
}
但由於事件不會立即觸發(哎呀,duhh),這不是一個可行的解決方案。我還可以嘗試其他類型的答案嗎?我也使用jQuery,如果這有幫助的話。
在我的代碼中,我遇到了一個問題:有時它會發生,比如說scrollLeft已經爲0,那麼我的代碼也會將它設置爲0.因此,不會觸發滾動事件,並且忽略下一個用戶滾動。 (如果他們使用Home,End等進行滾動,這只是一個真正的問題)。但這絕對是一個密切的解決方案 - 而且我知道我在這個虛擬實現中錯過了一些愚蠢的東西。謝謝! – Matchu 2009-09-06 21:26:00
我想知道那件事...那麼你最好的選擇是在設置標誌之前檢查你是否改變了價值 - 如果你不是這樣的話,不要設置它。你可能已經把這個代碼分解成了一個單獨的函數,但是如果沒有,那麼這樣做會更容易一些 - 參見Rodrigo的回答。 – Shog9 2009-09-06 21:29:36