2012-05-25 13 views

答えて

50
var width = $(window).width(); 
$(window).on('resize', function(){ 
    if($(this).width() != width){ 
     width = $(this).width(); 
     console.log(width); 
    } 
}); 
+0

これは素晴らしいです... –

+0

幅のみが変更されたときや、ピクセル値よりも小さいときにのみ動作する方法はありますか?例えば。 if($(window).width()<500)を上記と組み合わせたら? – Dan382

+1

上記のコードは機能しますが、そのパフォーマンスは最適ではありません。 jQueryウィンドウオブジェクトは、1回だけ実行できたとしても、複数回作成されます。また、ウィンドウの新しい幅は無意識に複数回計算されます。 – Anton

16

あなたは両方のイベントを検出し、それは幅の変化だときだけでコードを実行することができます

var lastWidth = $(window).width(); 

$(window).resize(function(){ 
    if($(window).width()!=lastWidth){ 
     //execute code here. 
     lastWidth = $(window).width(); 
    } 
})   

そして、あなたはをデバウンスイベントをチェックしたい場合があります。

デバウンスでは、呼び出されることなく一定時間が経過するまで関数が再度呼び出されないように強制します。 。のように、「100ミリ秒は、それが呼び出されることなく経過している場合にのみ、この機能を実行


を続きを読む:


1

一つもこのために、この小さなjQueryプラグインを使用することができます。https://github.com/adjohnson916/jquery-resize-dimension

は、より読みやすい独自のコードを保持します:

ResizeDimension.bind('width'); 
$(window).on('resize-width', function() { 
    console.log('resize-width event'); 
}); 

か、単に:

$(window).resizeDimension('width', function() { 
    console.log('resize-width event'); 
}); 
4

カップルがすでに存在しているにもかかわらずこの種のタスクはパフォーマンス上重要です(ユーザーがウィンドウのサイズを変更している間にウィンドウのサイズ変更イベントが何度もトリガーされる)ので、私は強く成果。 、以下の最適化されたコードを見ていてください:

/* Do not waste time by creating jQuery object from window multiple times. 
* Do it just once and store it in a variable. */ 
var $window = $(window); 
var lastWindowWidth = $window.width(); 

$window.resize(function() { 
    /* Do not calculate the new window width twice. 
    * Do it just once and store it in a variable. */ 
    var windowWidth = $window.width(); 

    /* Use !== operator instead of !=. */ 
    if (lastWindowWidth !== windowWidth) { 
     // EXECUTE YOUR CODE HERE 
     lastWindowWidth = windowWidth; 
    } 
}); 

プラス、あなたはDebounce/Throttleパターンを確認するに興味があるかもしれない - 彼らはこのようなケースでは非常にパフォーマンスを向上させます。

関連する問題