我希望我的函式在滾動時觸發,然后等待 250 毫秒,直到它再次觸發。
function myFunction() {
console.log('hello');
}
$(window).on('scroll', function() {
myFunction();
});
我試過超時:
$(window).on('scroll', function() {
setTimeout(function() {
myFunction();
}, 250);
});
但是,此方法在觸發該功能之前會延遲 250 毫秒。
uj5u.com熱心網友回復:
基于這個答案,您可以添加一個標志,以便不會觸發其他事件,然后使用超時清除該標志。
請注意,這將在超時內丟失/丟棄事件,因此不應用于用戶鍵盤輸入等操作;debounce更適合的地方。
var active = false;
$(window).on('scroll', function() {
if (active) return;
active = true;
myFunction();
setTimeout(function() {
active = false;
}, 250);
});
function myFunction() { console.log("scroll"); }
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div style='height:30000px;'>
something to scroll
</div>
這是一個基本的油門實作。改進將是使其模塊化/命名空間和/或將“活動”標志存盤在元素本身上;這樣同一個事件可以被多個元素重用,并且不會創建很多全域變數。
uj5u.com熱心網友回復:
只需在setTimeout.
$(window).on('scroll', function() {
myFunction(); // call once
setTimeout(function() {
myFunction();
}, 250); // repeat call after 250ms
});
如果您希望每 250 毫秒重復呼叫一次,請使用setInterval而不是。setTimeout
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/475390.html
標籤:javascript jQuery
下一篇:在資料表中進行過濾時更新總和
