11
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

window.matchMedia は超便利な件

Last updated at Posted at 2018-11-01

レスポンシブデザインのサイトを構築していく中で、「この横幅の時はこうで、それ以上はこう・・・」なんて場面があると思います。

それがJavaScriptを利用してスライダーを使用していた場合、
・767px以下の時はスライダーは解除する。
・それ以上の場合はスライダーが動く

なんてのを今までは

$(window).on('resize', function(){
    var myWindowWidth = $(window).width();
    if(myWindowWidth < 767){
       hoge();
    }else{
       hogehoge();
    }
});

なんてやってましたが、リサイズするたびイベントが行われるのでスライダーの挙動を制御しきれない場面がありました。
他にもTimerを利用したりとしていましたが綺麗では無い。

そこでこれ。「window.matchMedia」です。
とある点(ブレイクポイント)を通過したときのみ、イベントが発火します。
例えば定番ライブラリ「slick」を利用した場合、上記の動きを実現させるには

$(document).ready(function(){
  $([selector]).slick();   //とりあえず一回起動
  if(window.matchMedia("(max-width:767px)").matches){
      // 読み込みが完了したときに、767px以下の場合に行いたい処理
      $([selector]).slick('unslick');   //スライダー解除
  }else{
      // 読み込みが完了したときに、767px以上の場合に行いたい処理
  }
  function matchFunc(){
      if(window.matchMedia("(max-width:766px)").matches){
        // windowサイズを変更して、766px以下になったら行うイベント
        $([selector]).slick('unslick');   //スライダー解除
      }
      if(window.matchMedia("(min-width:767px)").matches){
        // windowサイズを変更して、767px以上になったら行うイベント
        $([selector]).slick();   //スライダー起動
      }
  }
  window.matchMedia("(max-width:767px)").addListener(matchFunc);
});

とこんな感じです。
スッキリとして見栄えもいいです。

11
21
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
11
21

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?