画面サイズが小さいときはハンバーガーボタンが表示されるウェブサイトを作っています。
このハンバーガーボタンをクリックすると、
1.htmlタグにopenというクラス名がつく
2.それに伴いナビゲーション部分が全画面に表示される
という2つの動きが生じる仕様にしています。
このときに画面でスクロールができると不都合が生じるので、スクロールを禁止したいと考えています。
CSSで
css
1html.open, .open body { 2 overflow: hidden; 3}
というコードも作ってみましたが、iPhoneで確認したところスクロールされてしまいました。
そこで「htmlタグにopenというクラス名がついたときは、スクロールを禁止する」というJavaScriptを作ることにしました。
といってもJavaScriptは今までちゃんと使ったことはないので、ネットでコードを検索することにしました。
その結果、「特定のクラス名があるかどうかを判別して条件分岐する」という以下のサイトと
https://www.imamura.biz/blog/27372
「【javaScript】でスクロールを禁止にする」という以下のサイト
https://programming.sincoston.com/no-scroll-pc-mobile/
を参考に、自分でも次のようなコードを作ってみました。
JavaScript
1var html = document.getElementsByTagName('html'); 2 3if (html.classList.contains('open') == true) { 4 // スクロール禁止 5 function no_scroll() { 6 // PCでのスクロール禁止 7 document.addEventListener("mousewheel", scroll_control, { passive: false }); 8 // スマホでのタッチ操作でのスクロール禁止 9 document.addEventListener("touchmove", scroll_control, { passive: false }); 10 } 11 12 // スクロール関連メソッド 13 function scroll_control(event) { 14 event.preventDefault(); 15 } 16}
しかし動きません。
ディベロッパーツールをみると、2行目の「containsが読み取れない」ということなのですが、直し方がわかりません。
修正の方法が知りたいです。
よろしくお願いします。