2012-06-15 6 views
15

ロード時にクラスを追加/削除するための非常に基本的なスクリプトを書きました。jquery、ウィンドウの幅が変更されたときにクラスを追加/削除する

これを実行するより良い方法があるのか​​、コード行を減らすことができるのかどうか疑問に思っていました。

基本的には、サイトを小さな画面で見たときにスタイルを変更したいと思っています。私はそれが特定の幅の下に行ったときに、htmlタグに新しいクラスを追加することが最善の考えだ...

とにかくここに私のコードです。

<script type="text/javascript"> 
$(document).ready(function() { 
    /* Check width on page load*/ 
    if ($(window).width() < 514) { 
    $('html').addClass('mobile'); 
    } 
    else {} 
}); 

$(window).resize(function() { 
    /*If browser resized, check width again */ 
    if ($(window).width() < 514) { 
    $('html').addClass('mobile'); 
    } 
    else {$('html').removeClass('mobile');} 
}); 

おかげ

ジリアン

+6

1オプションはメディアクエリを使用しています – undefined

答えて

2
function resize() { 
    if ($(window).width() < 514) { 
    $('html').addClass('mobile'); 
    } 
    else {$('html').removeClass('mobile');} 
} 

$(document).ready(function() { 
    $(window).resize(resize); 
    resize(); 
}); 
+0

何らかの理由で、これが私にとって本当にうまくいったのはこれだけです。ありがとうございました! –

15

使用するメディアクラスのすべての

@media screen and (max-width: 900px) { 
    .class { 
    width:800px; 

    } 
} 

@media screen and (max-width: 500px) { 
     .class { 
     width:450px; 

    } 
} 
+0

私はこのソリューションが本当に好きです。 – iappwebdev

+0

なぜ、私は '@ media'クエリを信頼することを学んだことがないのか説明できません。 –

+0

しかし、そうでなければ自分を納得させる強い理由があります – Rab

12

まず、DRY(自分を繰り返してはいけない)を使用して、あなたのコード関数:

function checkWidth(init) 
{ 
    /*If browser resized, check width again */ 
    if ($(window).width() < 514) { 
     $('html').addClass('mobile'); 
    } 
    else { 
     if (!init) { 
      $('html').removeClass('mobile'); 
     } 
    } 
} 

$(document).ready(function() { 
    checkWidth(true); 

    $(window).resize(function() { 
     checkWidth(false); 
    }); 
}); 
+0

'$(document).ready()'は 'window'オブジェクトでは本当に必要ではなく、' checkWidth() '関数はどこにでも入ることができます'$(window).resize()'ハンドラを設定します。スコープから後で呼び出す必要がある場合は、常に '$(window).resize()'することができます。 –

+0

IMHO、私はあなたが '$(document).ready()'を必要とすると思います。なぜなら、モバイルデバイスでは、最初の読み込み時に正しく動作しないからです。これはちょうど私の経験なので、塩の穀物でそれを取る! –

38

私はパーティーに遅刻していることは知っていますが、実際には必要ないものは$(document).ready()のように見えました。

セレクタを何度も呼び出す場合は、キャッシュを試してください。la var $window = $(window);これはパフォーマンスの向上に役立ちます。関数式を使用してカプセル化し、グローバルスコープから外れても、$window$htmlのキャッシュされたjQueryで選択された要素にアクセスできます。

(function($) { 
    var $window = $(window), 
     $html = $('html'); 

    $window.resize(function resize(){ 
     if ($window.width() < 514) { 
      return $html.addClass('mobile'); 
     } 

     $html.removeClass('mobile'); 
    }).trigger('resize'); 
})(jQuery); 

http://jsfiddle.net/userdude/rzdGJ/1

おそらく従うことが少し楽に少しクリーナー、:

(function($) { 
    var $window = $(window), 
     $html = $('html'); 

    function resize() { 
     if ($window.width() < 514) { 
      return $html.addClass('mobile'); 
     } 

     $html.removeClass('mobile'); 
    } 

    $window 
     .resize(resize) 
     .trigger('resize'); 
})(jQuery); 

http://jsfiddle.net/userdude/rzdGJ/2

+2

良い回答の例:) – arshad

+0

素晴らしい答えがうまくいく – Firefog

+0

あなたは命を救っています!おそらくここに – LOTUSMS

2

は、この問題は実際には、しばらくの間、私を悩まさ。私は通常、トランジションのために複数のサイズを持っています。私はこの私が共有したいとの考えを書いた:

$(function() { 
    var pageTransitions = [['full',1600],['mobile',800],['tiny',400],['micro',0]]; // number shows minimum size - must be from high to low 
    function resize() { 
    var target = 0, 
     w = $(window).width(), 
     h = $('html'); 
    $.each(pageTransitions, function(index, pageTransition) { 
     if(w > pageTransition[1]) { 
      target = index; 
      return false; 
     } 
    }); 
    $.each(pageTransitions, function(index, pageTransition) { 
     h.removeClass(pageTransition[0]); 
    }); 
    h.addClass(pageTransitions[target][0]); 
    } 
    resize(); 
    jQuery(window).on('resize', function() { 
    resize(); 
    }); 
}); 

http://jsfiddle.net/mckinleymedia/ERZ3q/7/

4

あなたはまた、私が思うに、このメソッドを使用することができ、その従うことが非常に明確:の

$(window).on('resize', function(){ 
     var win = $(this); 
     if (win.width() < 514) { 

     $('html').addClass('mobile'); 

     } 
    else 
    { 
     $('html').removeClass('mobile'); 
    } 

}); 

Simple Method

+0

これは、最初のページの読み込みではなく、サイズ変更時にだけクラスを追加することに注意してください – Nickfmc

関連する問題