PR

drawer.js でドロワーメニューを簡単作成 でもjQueryのプラグインがあると動かない場合ある。【サンプルコードあり】

JavaScript

今回、drawer.js でドロワーメニューが簡単に装着できると
効いたので早速実装してみました。

実装はほんとに簡単で、head内にdrawer.cssなどを追加、
body内に決められたコードを挿入。

最後</body>の直前にscriptコード入れて完了です。

まとめて書くとこんな感じです。

 

 

 <head>
  <!-- drawer.css -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/drawer/3.2.1/css/drawer.min.css">
  <!-- jquery & iScroll --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/iScroll/5.1.3/iscroll.min.js"></script>
  <!-- drawer.js --> <script src="https://cdnjs.cloudflare.com/ajax/libs/drawer/3.2.1/js/drawer.min.js"></script>

 </head>

  <body class="drawer drawer--left">
    <header role="banner">
  <!-- ハンバーガーボタン -->
      <button type="button" class="drawer-toggle drawer-hamburger">
        <span class="sr-only">toggle navigation</span>
        <span class="drawer-hamburger-icon"></span>
      </button>
  <!-- ナビゲーションの中身 -->
      <nav class="drawer-nav" role="navigation">
        <ul class="drawer-menu">
          <li><a class="drawer-brand" href="#">Brand</a></li>
          <li><a class="drawer-menu-item" href="#">Nav1</a></li>
          <li><a class="drawer-menu-item" href="#">Nav2</a></li>
        </ul>
      </nav>
    </header>
    <main role="main">
  </main>

  <!-- drawer利用の宣言 -->
    <script>
      $(document).ready(function() {
        $('.drawer').drawer();
      });
      </script>
  </body>

 

 

これだけで下記のように、バーガーボタンとボタン押すと
メニューが表示されるようになります。

こんな感じ

 

コード書いてもここまで表示されなければ、うまく反映
されてない可能性があります。

私の場合は、コード書いてどこまで反映されるのわからなかったので
メニューの設定も必要なのかなとその方法も探しました。

でも、上の動画の状態まで出来てるので、エラーが無ければ
細かい設定するだけで完了で簡単に出来ます。

エラーか確認する方法

もし、表示されない場合は、デベロッパーツール開いて、
上部のコンソールをクリックして、エラーが出てないか確認します。

私の場合はこんな感じでエラーが出てました。

Uncaught TypeError: $(…).drawer is not a function
at HTMLDocument.<anonymous> (headertest.html:392:22)
at l (jquery.min.js:2:29375)
at c (jquery.min.js:2:29677)

 

 

jQueryのプラグインを複数入れてる場合は注意

この、drawer.js は複数のプラグインを入れてる場合、エラーに
なるような感じです。

以前にも、jQueryのプラグイン干渉聞いたことはあったので
もしかしてとは思ってましたが。。。。

今回、PC表示時にナビメニューで使ってたのでそれと干渉してるのかな?

実際に解決した方法

試しに、今回のdrawer.js用で挿入した、scriptコードの前に
下記のコードを追加しました。

jQuery.noConflict();
(function($) {

})(jQuery);
で囲ってあげると解消されるみたいなのでやってみたらOKでした。

無事に表示されるようになりました。

 

最終的にうまくいったコード

HTML </head>のすぐ上に挿入

ここに入れる script ソースの順番に注意!
今回は、先に入れてる方のソースを上に置かないとエラーになりました。

  <!-- drawer.css -->
  <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/drawer/3.2.1/css/drawer.min.css">
  <!-- jquery & iScroll --> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/iScroll/5.1.3/iscroll.min.js"></script>
  <!-- drawer.js --> <script src="https://cdnjs.cloudflare.com/ajax/libs/drawer/3.2.1/js/drawer.min.js"></script>

 

HTML header部分に挿入

  <body class="drawer drawer--left">
    <header role="banner">
  <!-- ハンバーガーボタン -->
      <button type="button" class="drawer-toggle drawer-hamburger">
        <span class="sr-only">toggle navigation</span>
        <span class="drawer-hamburger-icon"></span>
      </button>
  <!-- ナビゲーションの中身 -->
      <nav class="drawer-nav" role="navigation">
        <ul class="drawer-menu">
          <li><a class="drawer-brand" href="#">Brand</a></li>
          <li><a class="drawer-menu-item" href="#">Nav1</a></li>
          <li><a class="drawer-menu-item" href="#">Nav2</a></li>
        </ul>
      </nav>
    </header>
    <main role="main">
  </main>

 

HTML 一番下</body>のすぐ上に挿入

    <!-- drawer利用の宣言 -->
    <script>
      jQuery.noConflict(); 
      (function($) {
      
      $(document).ready(function() {
        $('.drawer').drawer();
      });
      })(jQuery);
      </script>
  </body>

 

最終的にこのコードで表示されるようになりました。

drawer.js 簡単なんでぜひ使ってみてください。

また、挿入コードは時期によってバージョン等あるみたいです。
こちらの記事で詳しく書かれてますので参考にしてください。

私も、この記事からコードいただいてます。

 

他の方法もあったが使い方注意です。

 

 

 

 

 

 

 

 

スポンサーリンク

ハードな通信をする方におすすめ!専用帯域で高速インターネット!
hi-hoひかりから、ゲームに特化した回線「hi-hoひかりwith games」が新登場。
ラグ・遅延を抑えて勝利を掴め!

hi-ho with games

オンラインゲーム・配信者向けインターネット
月額4,400円~
日本最大級 プロ愛用のゲーム専用インターネット光回線

JavaScript
inoproをフォローする

コメント

タイトルとURLをコピーしました