スクロール位置で自動表示するモーダルウインドウの作り方
スクロール位置で自動表示するモーダルウインドウの作り方を紹介します。このサンプルでは、ページを下へスクロールし、指定したスクロール位置へ到達するとJavaScriptでモーダルウインドウを自動表示します。通常のモーダルウインドウのように開くボタンをクリックする必要がなく、ページを読み進めたタイミングに合わせて案内を表示できるのが特徴です。
お問い合わせページで補足情報を案内したい場合、ECサイトで商品ページを一定位置まで読んだ利用者へ案内を表示したい場合、会員サイトで重要なお知らせを表示したい場合などに利用できます。このサンプルでは500px以上スクロールするとモーダルが表示され、一度表示されたあとは同じページ内でスクロールを続けても繰り返し表示されません。「閉じる」ボタンをクリックするとモーダルを閉じることができます。
基本的なモーダルウインドウの構成を維持しながら、JavaScriptのスクロールイベントを利用して自動表示の処理だけを追加しています。HTMLではモーダル内のタイトルや文章を変更でき、CSSでは横幅、余白、背景色、角丸などを調整できます。JavaScriptのスクロール位置を変更すれば、自動表示するタイミングも用途に合わせて設定できます。レスポンシブにも対応しているため、スマートフォン・タブレット・PCで利用できます。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
ページを下へスクロールすると、400px以上のスクロール位置でモーダルウインドウが自動表示されます。
指定したスクロール位置を超えたため、モーダルウインドウが自動表示されました。閉じるボタンをクリックするとモーダルを閉じます。
ページ先頭から400px以上スクロールすると、モーダルウインドウが自動表示されます。再度確認する場合は「動作をもう一度確認する」をクリックしてください。
コードをコピーして使おう!
<!DOCTYPE html>
<html lang="ja">
<head>
<!-- 文字コード -->
<meta charset="UTF-8">
<!-- スマートフォン対応 -->
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<!-- ページタイトル -->
<title>スクロール位置で自動表示するモーダルウインドウ</title>
<!-- CSSファイル -->
<link rel="stylesheet" href="style.css">
</head>
<body>
<!-- 説明エリア -->
<div class="modal-window-auto-open-on-scroll_wrap">
<!-- タイトル -->
<div class="modal-window-auto-open-on-scroll_title">
スクロール位置で自動表示するモーダルウインドウ
</div>
<!-- 説明文 -->
<p class="modal-window-auto-open-on-scroll_text">
ページを下へスクロールすると、400px以上のスクロール位置でモーダルウインドウが自動表示されます。
</p>
</div>
<!-- 自動表示するモーダル本体 -->
<div
class="modal-window-auto-open-on-scroll_modal"
role="dialog"
aria-modal="true"
aria-labelledby="modal-window-auto-open-on-scroll-title"
data-scroll-modal="">
<!-- モーダルタイトル -->
<div
class="modal-window-auto-open-on-scroll_modal-title"
id="modal-window-auto-open-on-scroll-title">
スクロール位置のお知らせ
</div>
<!-- モーダル本文 -->
<p class="modal-window-auto-open-on-scroll_modal-text">
指定したスクロール位置を超えたため、モーダルウインドウが自動表示されました。閉じるボタンをクリックするとモーダルを閉じます。
</p>
<!-- モーダルを閉じるボタン -->
<button
class="modal-window-auto-open-on-scroll_close"
type="button"
data-scroll-modal-close="">
閉じる
</button>
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLでは説明エリア、自動表示するモーダルウインドウ、閉じるボタンを配置します。CSSでは基本形のモーダルウインドウを基準に、横幅、余白、背景色、角丸、影などを設定します。JavaScriptではページのスクロール位置を監視し、ページ上端から400px以上スクロールした時点でモーダルを自動表示します。一度表示されたあとは、同じページ内で繰り返し表示されません。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlは説明エリアとモーダルウインドウを構成するファイルです。説明エリアのタイトルや文章、モーダルタイトル、本文、「閉じる」ボタンの文字を変更できます。style.cssとscript.jsもindex.htmlから読み込みます。
style.cssは説明エリアとモーダルウインドウのデザインを設定するファイルです。説明エリアやモーダルの横幅、余白、背景色、文字色、角丸、影などを変更できます。また、min-height:1200px;を指定して、スクロールによる自動表示を確認できるページの高さを確保しています。
script.jsはスクロール位置の判定とモーダルの開閉を行うファイルです。window.scrollY >= 400でページ上端から400px以上スクロールしたかを判定し、条件を満たすとis-activeクラスを追加してモーダルを表示します。scrollModalShownで表示済みかを管理しているため、一度表示されたあとは同じページ内で再表示されません。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを同じ階層で配置します。3つのファイルを保存したあと、sample/index.htmlをブラウザで開いてください。index.htmlからstyle.cssとscript.jsが読み込まれ、ページ上端から400px以上スクロールすると画面中央にモーダルウインドウが自動表示されます。「閉じる」ボタンをクリックするとモーダルが閉じます。一度表示されたあとは、さらにスクロールしても同じページ内では再表示されません。
カスタマイズできる内容
index.htmlでは説明エリアのタイトルや文章、モーダルタイトル、本文、「閉じる」ボタンの文字を変更できます。style.cssでは説明エリアやモーダルの最大横幅、余白、背景色、文字色、角丸、影、ボタンのデザインなどを変更できます。script.jsではwindow.scrollY >= 400の400を変更することで、モーダルを自動表示するスクロール位置を調整できます。
数値調整
style.css
padding:40px 20px;
ページ全体の余白です。40pxが上下、20pxが左右の余白です。値を大きくすると画面端との間隔が広がり、小さくすると狭くなります。
min-height:1200px;
ページ全体の最小高さです。値を大きくするとページが長くなり、より長い距離をスクロールできるようになります。
max-width:700px;
説明エリアの最大横幅です。値を大きくすると横に広がり、小さくするとコンパクトになります。
margin:40px auto;
説明エリアの上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。
padding:32px;
説明エリアの内側余白です。値を大きくすると内容と外枠の間隔が広がり、小さくすると狭くなります。
border-radius:18px;
説明エリアの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
font-size:22px;
説明エリアのタイトル文字サイズです。値を大きくすると文字が大きくなり、小さくすると小さくなります。
width:calc(100% - 40px);
モーダルの横幅です。画面幅から40pxを差し引いて表示します。40pxを大きくすると左右の余白が広がってモーダルが狭くなり、小さくするとモーダルが広くなります。
max-width:420px;
モーダルの最大横幅です。値を大きくするとモーダルが横に広がり、小さくするとコンパクトになります。
padding:28px;
モーダル本体の内側余白です。値を大きくすると内容とモーダル端の間隔が広がり、小さくすると狭くなります。
border-radius:18px;
モーダル本体の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
box-shadow:0 20px 40px rgba(0,0,0,.2);
モーダル本体の影です。20pxや40pxを大きくすると影の位置や広がりが大きくなり、小さくすると控えめになります。
margin:0 0 24px;
モーダル本文の下側余白です。24pxを大きくすると「閉じる」ボタンとの間隔が広がり、小さくすると狭くなります。
padding:10px 20px;
「閉じる」ボタンの内側余白です。10pxが上下、20pxが左右の余白です。値を大きくするとボタンが大きくなり、小さくするとコンパクトになります。
script.js
window.scrollY >= 400
モーダルを自動表示するスクロール位置です。400はページ上端から400pxスクロールした位置を表します。値を大きくするとページをより下までスクロールしてから表示され、小さくすると早い位置で表示されます。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssの説明エリアにはwidth:100%とmax-width:700px、モーダル本体にはwidth:calc(100% - 40px)とmax-width:420pxを設定しているため、画面幅に合わせて横幅が縮小されます。また、640px以下ではメディアクエリを適用し、説明エリアの余白をpadding:24px 18px;、モーダル本体の余白もpadding:24px 18px;へ変更しています。スマートフォン・タブレット・PCの画面幅に合わせて利用できます。
コメント