$(window).scroll(function() {
clearTimeout($.data(this, 'scrollTimer'));
$.data(this, 'scrollTimer', setTimeout(function() {
// do something
console.log("Haven't scrolled in 250ms!");
}, 250));
});
Aktualizacja
Napisałem rozszerzenie, aby ulepszyć domyślną on
obsługę zdarzeń w jQuery . Dołącza funkcję obsługi zdarzenia dla jednego lub większej liczby zdarzeń do wybranych elementów i wywołuje funkcję obsługi, jeśli zdarzenie nie zostało wyzwolone dla danego interwału. Jest to przydatne, jeśli chcesz wywołać wywołanie zwrotne dopiero po opóźnieniu, takim jak zdarzenie zmiany rozmiaru itp.
Ważne jest, aby sprawdzić repozytorium github pod kątem aktualizacji!
https://github.com/yckart/jquery.unevent.js
;(function ($) {
var on = $.fn.on, timer;
$.fn.on = function () {
var args = Array.apply(null, arguments);
var last = args[args.length - 1];
if (isNaN(last) || (last === 1 && args.pop())) return on.apply(this, args);
var delay = args.pop();
var fn = args.pop();
args.push(function () {
var self = this, params = arguments;
clearTimeout(timer);
timer = setTimeout(function () {
fn.apply(self, params);
}, delay);
});
return on.apply(this, args);
};
}(this.jQuery || this.Zepto));
Użyj go jak każdego innego programu obsługi on
lub bind
-event, z wyjątkiem tego, że możesz przekazać dodatkowy parametr jako ostatni:
$(window).on('scroll', function(e) {
console.log(e.type + '-event was 250ms not triggered');
}, 250);
http://yckart.github.com/jquery.unevent.js/
(to demo używa resize
zamiast scroll
, ale kogo to obchodzi ?!)