ブラウザによるイベントの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.json
bind
;(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);
于 2013-03-02T02:02:40.187 に答える