2020-08-17に投稿

JavaScript初心者です。
サイトのパーツとしてPCサイズではhover時に中の要素を出して、スマホサイズではclick時に中の要素をアコーディオンメニューのように出すことを実装しようとしているのですが、
windowのresizeでwidthを取得していifの分岐、など試してみてもresize前のイベントが消えなかったり、挙動がバグったりして困っています。

現状は一度諦めて下記のように記述して、サイズ変更の都度リロードしている状態です。
下記の記述をresizeしても正しく動作するにはどうすれば良いでしょうか。
ご指導頂けましたら幸いです。
何卒宜しくお願い申し上げます。

function switchByWidth() {
  if (window.matchMedia("(max-width: 767px)").matches) {

    // スマホサイズ アコーディオンメニュー
    $(function () {
      $("#header__menu01").on("click", function () {
        $(this).find("span").next().slideToggle(200);
      });
    });

  } else if (window.matchMedia("(min-width:768px)").matches) {

    // pcサイズホバーイベント
    $("#header__menu01").hover(
      function () {
        //カーソルが重なった時
        $(this).children(".flex-wrapper").addClass("open");
      },
      function () {
        //カーソルが離れた時
        $(this).children(".flex-wrapper").removeClass("open");
      }
    );

  }
}

window.onload = switchByWidth;
window.onresize = switchByWidth;

tomoya925
コメント