未経験のwebサイト制作の勉強

未経験からwebサイト制作の勉強をし、現在制作会社で働いております。

jqueryでのresize設定

レスポンシブサイトでは、読み込み時だけで無く、ブラウザーをリサイズした時にもイベントが反応するようにしなければいけない場合があります。
例えばPC時では通常のナビゲーションボタンでスマホ時にはハンバーガーメニューの時などです。

PC時ではナビゲーションボタンはもちろん表示されている状態ですが、スマホハンバーガーメニューではナビゲーションボタンは最初、非表示に設定されています。
スマホ時のナビゲーションボタンを「slideToggle」などで表示・非表示をコントロールしている場合、1度出して、閉まったナビゲーションボタンには「display:none」がかかった状態になって閉まっています。
この状態で、ブラウザーをPCサイズにリサイズすると、ナビゲーションボタンに「display:none」がかかったままなので、ナビゲーションボタンが非表示の状態になっています。
なので、jQueryでリサイズ時にイベントを指定する必要があります。

resizeイベントの設定

ブラウザのウインドウをリサイズした時に引数のfunctionを実行します。また引数に何も設定しない場合は、要素に設定されたリサイズ時の処理を実行します。セレクタにはwindowsを指定しなければなりません。

読み込み時とリサイズ時を同時に処理する場合

$(window).on('load resize', function(){
// 処理を記載
});

今回の場合

$(window).on('load resize', function(){
  if($(window).innerWidth() < 768 ){
  //スマホの時の状態
    $('#g_nav').hide();//SPの時はnavを非表示にしておく
  }else{
  //タブレット・PCの時の状態
    $('#g_nav').show();//SP以外の時はnavを表示しておく
    $('#btn').removeClass('click');
  };
 	}); 

ただし、iPhoneandroidではresizeイベントの定義が若干違く、iPhoneでは画面を縦スクロールした際にもresizeイベントが発生してしまい、おかしな動きになってしまいます。
その場合は横幅にのみに対応したresizeイベントの設定が必要になります。