2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

この記事は、ラクスパートナーズ AdventCalendar 2025の2日目の記事です。
(個人で25日連続投稿にチャレンジ中のカレンダーになります)


経緯

あるプロジェクトでチームメンバーの方に
「ダイアログ表示中は背後のページが動かない(スクロールしない)ようにしてほしい」
という要望を受けました。

PCで操作した際は気にならなかったのですが、モバイル端末でダイアログを操作すると、背後にあるページまでスクロールされてしまう状態となっていました。これではユーザーにストレスが溜まりそうです。

調べたところ、bodyやhtmlにoverflow: hiddenを適用するとスクロールできなくなることを知ったので、そのやり方をメモしていきます。

実装方法

スクロール禁止
const openDialog = () => {
    document.documentElement.style.overflow = 'hidden';
    document.body.style.overflow = 'hidden'
}

やり方は簡単です。
上記のようにJavaScript側でdocumentElementとbodyに対してoverflow: hiddenを適用するだけです。

documentElementはdocumentのルート要素を返却するプロパティで、ここでは<html>を返却します(以下MDNから引用)。

documentElement は Document インターフェイスの読み取り専用プロパティで、 document のルート要素である Element を返します(例えば、HTML 文書の場合は 要素)。

空ではない HTML 文章の場合、 documentElement は常に 要素を返します。空ではない XML 文章の場合、 documentElement は常に文章のルート要素である何らかの要素を返します。
https://developer.mozilla.org/ja/docs/Web/API/Document/documentElement

スクロール禁止を解除したい場合は、overflowに空の値を指定します。

スクロール禁止の解除
const closeDialog = () => {
    document.documentElement.style.overflow = '';
    document.body.style.overflow = '';
}

小ネタですが、Web開発をする上でダイアログの実装は避けられないと思うので、覚えておいて損はないテクニックだと思います。

以上、どなたかの参考になれば嬉しいです。

2
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?