Możesz używać setTimeout()
iw clearTimeout()
połączeniu z jQuery.data
:
$(window).resize(function() {
clearTimeout($.data(this, 'resizeTimer'));
$.data(this, 'resizeTimer', setTimeout(function() {
//do something
alert("Haven't resized in 200ms!");
}, 200));
});
Aktualizacja
Napisałem rozszerzenie, aby ulepszyć domyślny on
(& bind
) -event-handler jQuery . Dołącza funkcję obsługi zdarzenia dla co najmniej jednego zdarzenia do wybranych elementów, jeśli zdarzenie nie zostało wyzwolone dla danego interwału. Jest to przydatne, jeśli chcesz uruchomić wywołanie zwrotne dopiero po opóźnieniu, takim jak zdarzenie zmiany rozmiaru, lub w innym przypadku.
https://github.com/yckart/jquery.unevent.js
;(function ($) {
var methods = { on: $.fn.on, bind: $.fn.bind };
$.each(methods, function(k){
$.fn[k] = function () {
var args = [].slice.call(arguments),
delay = args.pop(),
fn = args.pop(),
timer;
args.push(function () {
var self = this,
arg = arguments;
clearTimeout(timer);
timer = setTimeout(function(){
fn.apply(self, [].slice.call(arg));
}, delay);
});
return methods[k].apply(this, isNaN(delay) ? arguments : args);
};
});
}(jQuery));
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('resize', function(e) {
console.log(e.type + '-event was 200ms not triggered');
}, 200);
http://jsfiddle.net/ARTsinn/EqqHx/