所以我有一個滾動事件。它負責確定是否應該在頁面上移動某些內容。當您向下滾動時,它會熄滅。如果你向下滾動,拖動,它會發出幾百億次和幾百億次的火焰。正如你所期望的,也許。這裏有一些簡單的虛擬代碼來表示事件的順序。如何在jQuery中中斷以前的事件觸發器
function scroller() {
// 1. A really expensive calculation that depends on the scroll position
// 2. Another expensive calculation to work out where should be now
// 3. Stop current animations
// 4. Animate an object to new position based on 1 and 2
}
$(window).on('resize' scroller);
不要誤會我的意思,它通常準確所以沒有那麼多的併發問題的。我的動畫裏面的事件調用.stop()
(作爲第3部分),所以最新版本總是*正確的,但它消耗了大量的CPU。我希望成爲一名負責任的開發人員,不要期望每個用戶都擁有一個四核i7。
所以對我的問題... 我可以殺死以前調用我的方法從一個特定的事件處理程序?有什麼辦法可以干預這堆排隊/並行運行的「進程」,這樣當一個新的堆棧被添加到堆棧時,舊的堆棧會立即被終止?我確信有一種並行的方式來表達這種措辭,但我想不起來。
*至少我認爲是這樣的話 - 如果計算在前面的運行需要較長的時間,他們的動畫可以被稱爲最後一個,並可能向上翹起整個運行!嗯。在此之前我沒有想過這件事。另一個立即停止以前的迭代的原因!
一個可能的解決方案是使用某種[反跳(http://underscorejs.org/#debounce)像等待200ms的像的時間看看是否有其他事件會被解僱 –