$(window).scroll(function() {
clearTimeout($.data(this, 'scrollTimer'));
$.data(this, 'scrollTimer', setTimeout(function() {
// do something
console.log("Haven't scrolled in 250ms!");
}, 250));
});
Cập nhật
Tôi đã viết một phần mở rộng để nâng cao on
trình xử lý -event mặc định của jQuery . Nó đính kèm một hàm xử lý sự kiện cho một hoặc nhiều sự kiện vào các phần tử đã chọn và gọi hàm xử lý nếu sự kiện không được kích hoạt trong một khoảng thời gian nhất định. Điều này hữu ích nếu bạn muốn kích hoạt một cuộc gọi lại chỉ sau một khoảng thời gian trì hoãn, như sự kiện thay đổi kích thước hoặc tương tự.
Điều quan trọng là phải kiểm tra github-repo để biết các bản cập nhật!
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));
Sử dụng nó giống như bất kỳ trình xử lý on
hoặc bind
-event nào khác , ngoại trừ việc bạn có thể chuyển thêm một tham số vào cuối cùng:
$(window).on('scroll', function(e) {
console.log(e.type + '-event was 250ms not triggered');
}, 250);
http://yckart.github.com/jquery.unevent.js/
(bản demo này sử dụng resize
thay vì scroll
, nhưng ai quan tâm ?!)