3

ブラウザによるイベントの2回の発生を回避することはできますが、タイミングに基づくことはできません(サイズ変更イベントの実行が長く続く場合、その解決策は不適切です)

4

2 に答える 2

0
window.blockResize = false;
$(window).resize(function() {

    if (window.blockResize) return;

        //do stuff


    window.blockResize = true;
    setTimeout(function(){window.blockResize = false},200);


});

わかりました、それはまだタイマーに基づいています、しかしそれは今私の場合は機能します。

于 2013-03-01T22:38:49.283 に答える
0

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));
});

アップデート

jQueryのデフォルト(&)-event-handlerを拡張する拡張機能を作成しました。イベントが特定の間隔でトリガーされなかった場合、選択した要素に1つ以上のイベントのイベントハンドラー関数をアタッチします。これは、サイズ変更イベントなど、遅延後にのみコールバックを起動する場合に役立ちます。 https://github.com/yckart/jquery.unevent.jsonbind

;(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または-eventハンドラーと同じように使用します。bind

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

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

于 2013-03-02T02:02:40.187 に答える