2016-11-06 14 views
0

変数に応じて条件をチェックしようとしています。長編短編:他の変数からオンザフライで変数を更新する

a。 body_size変数は、ユーザーがウィンドウのサイズを変更すると、オンザフライで更新されます。 //これを他の投稿でソートしました。

b.Then私は別の変数を更新する必要がある変数body_size知っ:body_sizeはX(私が設定した値)よりなど/小さい/大きい場合

することは、その後SlidesInViewは、自分自身を更新する必要があります。

デフォルトのスライドインビューは3です。

すべてがオンザフライで実行されます。二resizeイベントハンドラを作成しないでください

$(document).ready(function() { 
 

 
    var body_size; // this updates correctly 
 

 
    var resizeTimer; 
 

 
    function setContainerWidth() { 
 
    body_size = $('.container').width(); 
 
    } 
 

 
    $(window).resize(function() { 
 

 
    clearTimeout(resizeTimer); 
 
    resizeTimer = setTimeout(function() { 
 

 
     setContainerWidth(); 
 
     
 

 
    }, 200); 
 

 
    }); 
 
    setContainerWidth(); 
 
    console.log(body_size); 
 

 
    var SlidesInView = 3; // this should update depending on result below : 
 
    $(window).on('resize', function() { 
 
    setContainerWidth(); // to check width on resize? 
 
    if (body_size => 980) { 
 
     SlidesInView = 4; // change SlidesInView above if condition is met. 
 
    } else if (body_size <= 640) { 
 
     SlidesInView = 1; //change SlidesInView above if condition is met. 
 
    } 
 
    }); 
 

 
    console.log(SlidesInView); 
 
    }); // doc ready
.container{ 
 
    height:100vh; 
 
    width:100vw; 
 
    background:red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script> 
 
<div class="container"> 
 
</div>

答えて

0

:下のスニペットを参照してください。代わりに、あなたはすでに各上で実行されている機能でslidesInViewを更新サイズを変更:setContainerWidth

$(document).ready(function() { 
    var body_size, resizeTimer, slidesInView; 

    function setContainerWidth() { 
    body_size = $('.container').width(); 
    slidesInView = body_size >= 980 ? 4 
       : body_size >= 640 ? 3 
       :     1; 
    } 

    $(window).resize(function() { 
    clearTimeout(resizeTimer); 
    resizeTimer = setTimeout(setContainerWidth, 200); 
    }); 
    setContainerWidth(); 
}); 

いくつかの発言:

  • =>が無効な比較演算子である(それはarrow functionsの文脈で別の意味を持ちます) 。代わりに>=を使用してください。

  • 変数に最初の大文字を使用しないでください。クラス/コンストラクター名に対してのみこれを行うのが一般的ですが、他の変数には行いません。

  • ternary operator... ? .... : ...)は、値をslidesInViewに割り当てる方法に最適です。

  • あなたはsetTimeoutでただ一つの関数を呼び出すと、私は上記のコードでやったように、あなただけの、(ないコールそれに確認してますが、機能自体を渡す)setTimeoutの最初の引数としてその関数を渡すことができますが。

+0

迅速な対応と優れたヒントをありがとう。現在、値はリフレッシュ時に更新を取得するようです。例:コンテナの幅> = 980? 4.スニペットは初期値をチェックし、ブラウザウィンドウのサイズを次の条件に合わせるように変更し、ページを更新する必要があります。条件を変更するとすぐに変更を開始するには?モバイルデバイス(風景とポートレート)について不思議。 – user7121582

+0

確かに、それは実際には異なる質問です。あなたが持っているコンテンツを再構築したいのです。この質問は、DOMコンテンツではなく変数の更新に関するものです。あなたはそれについて質問があれば、新しい質問として投稿し、再構築する必要のあるHTMLを追加して、変数 'slidesInView'がどのようにそれに影響するべきかを説明することをお勧めします。質問を作成したら、ここにメモを残しておきましょう。あなたが望むなら、私も見ることができます。 – trincot

+0

ありがとうございます。私は新しい質問を作成しました。私がそこにあるすべてのコードを配置しました。あなたがそれを見ることができれば感謝します。ここにリンク[新しい質問](http://stackoverflow.com/questions/40449005/change-number-of-slides-depending-on-element-width) – user7121582

関連する問題