Чем отличаются абстракция и инкапсуляция?

Вы можете использовать setTimeout() и clearTimeout() в сочетании с jQuery.data :

$(window).resize(function() {
    clearTimeout($.data(this, 'resizeTimer'));
    $.data(this, 'resizeTimer', setTimeout(function() {
        //do something
        alert("Haven't resized in 200ms!");
    }, 200));
});

Обновить

Я написал extension , чтобы улучшить jQuery по умолчанию on (& amp; bind) - обработчик событий. Он прикрепляет функцию обработчика событий для одного или нескольких событий к выбранным элементам, если событие не было инициировано для заданного интервала. Это полезно, если вы хотите активировать обратный вызов только после задержки, например событие изменения размера или другое. 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));

Используйте его, как и любой другой обработчик on или bind -event, за исключением того, что вы можете передать дополнительный параметр последнему:

$(window).on('resize', function(e) {
    console.log(e.type + '-event was 200ms not triggered');
}, 200);

http://jsfiddle.net/ARTsinn/EqqHx/

66
задан Community 23 May 2017 в 12:02
поделиться