質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

Q&A

解決済

2回答

1579閲覧

JavaScriptでスクロール無効を実現したいです。

EzrealTrueshot

総合スコア388

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

0グッド

0クリップ

投稿2019/02/27 03:02

やりたいこと

ボタンAを押したら、Webページのスクロールを無効にして
ボタンBを押したら、Webページのスクロールを有効にしたい

困っていること

書いたコード

html

1 2無効にさせたい 3<button onclick="mukou()"></button> 4 5<script> 6function mukou(){ 7 console.log( document.getElementsByTagName('body')[0]) // 確認用 8 document.getElementsByTagName('body')[0].ontouchend = function(e) { 9 e.preventDefault(); 10 } 11} 12</script>

しらべたところ
https://medium.com/jsdownunder/locking-body-scroll-for-all-devices-22def9615177
このサイトに

javascript

1targetElement.ontouchend = (e) => { 2 e.preventDefault(); 3};

このように記載するとスクロールを無効にできるとあったのですが、できませんでした。

スクロールの無効とその解除を任意のタイミングで実現したいのですが、Pure JSで実現させるためにはどのようにしたらいいかご存知のかたいらっしゃいましたらご教示頂けませんでしょうか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2019/02/27 03:05

ontouchend ということは、スマホでのスクロール無効を考えていらっしゃるのですか?
EzrealTrueshot

2019/02/27 03:08

デスクトップPCから見るWebページ、スマホから見るWebページ両方を想定していますが、デスクトップPCから見るWebページでだけでも実現できたら嬉しいです。スマホの方は最悪あきらめようと思っております。
EzrealTrueshot

2019/02/27 03:38

1番、2番、3番しか見ていませんでした。 Proposed Solution — body-scroll-lock というのがあったのですね、確認してみようと思います。
EzrealTrueshot

2019/02/27 10:22

ありがとうございます! 無事に有効と無効ができるようになりました。 ベストアンサーさしあげたいため、何かコメントよろしくお願いいたします!
guest

回答2

0

自己解決

body-scroll-lockプラグインを利用して

bodyScrollLock.disableBodyScroll('body');
bodyScrollLock.enableBodyScroll('body');

こちらで解決できました。

投稿2019/02/27 11:56

EzrealTrueshot

総合スコア388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

ontouchendはスマホなどタッチデバイスでのイベント判定に使います。PCの場合onclickイベントを使う方がよさそうです。

以下のように書き換えたところ1度目のクリックでボタンが無効になり、2度目以降のクリックに反応しなくなりました。

js

1無効にさせたい 2<button onclick="mukou()">ボタン</button> 3 4<script> 5 function mukou() { 6 console.log(document.getElementsByTagName('button')[0]) // 確認用 7 document.getElementsByTagName('button')[0].onclick = function(e) { 8 e.preventDefault(); 9 } 10 } 11 12</script>

https://jsfiddle.net/z6f5xjku/2/

投稿2019/02/27 05:53

hibikikudo

総合スコア238

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2019/02/27 06:35

質問の趣旨(JavaScriptでスクロール無効)とあっていないと思いますので、マイナス評価しました。
EzrealTrueshot

2019/02/27 10:23

回答ありがとうございます。 bodyScrollLock.disableBodyScroll('body'); bodyScrollLock.enableBodyScroll('body'); この2行で無事に有効、無効の切り替えが実現することができました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問