Вот простой пример использования setTimeout для запуска функции, когда пользователь прекращает прокрутку:
(function() {
var timer;
$(window).bind('scroll',function () {
clearTimeout(timer);
timer = setTimeout( refresh , 150 );
});
var refresh = function () {
// do stuff
console.log('Stopped Scrolling');
};
})();
Таймер очищается во время срабатывания события прокрутки.Как только прокрутка останавливается, активируется функция обновления.
Или как плагин:
$.fn.afterwards = function (event, callback, timeout) {
var self = $(this), delay = timeout || 16;
self.each(function () {
var $t = $(this);
$t.on(event, function(){
if ($t.data(event+'-timeout')) {
clearTimeout($t.data(event+'-timeout'));
}
$t.data(event + '-timeout', setTimeout(function () { callback.apply($t); },delay));
})
});
return this;
};
Чтобы вызвать обратный вызов после 100 мс последнего события прокрутки в div (с пространством имен):
$('div.mydiv').afterwards('scroll.mynamespace', function(e) {
// do stuff when stops scrolling
$(this).addClass('stopped');
}, 100
);
Я использую это для прокрутки и изменения размера.