指定時間後にトーストを非表示にする方法
指定時間後にトーストを非表示にする方法を紹介します。このサンプルでは、ボタンをクリックすると画面右下へトーストを表示し、一定時間が経過すると自動的に非表示になります。保存完了や送信完了など、一時的なお知らせを表示したい場合によく利用される動作で、利用者が操作しなくても指定した時間でトーストを非表示にできるシンプルな実装です。
お問い合わせ画面の送信完了通知、管理画面の保存完了メッセージ、ECサイトのカート追加通知、会員サイトの設定変更完了など、短時間だけ結果を知らせたい場面で活用できます。トーストは画面右下へ表示され、指定した時間が経過すると自動で非表示になるため、作業を妨げることなく情報を伝えられます。JavaScriptで表示と非表示を制御しているため、初心者でも導入しやすい構成です。
ボタンの文字、トーストに表示するメッセージ、表示位置、背景色、文字色、余白、角丸、影などはHTMLとCSSから変更できます。また、自動で非表示になるまでの待機時間はJavaScriptの数値を変更するだけで調整できるため、用途に合わせて表示時間を簡単にカスタマイズできます。レスポンシブ対応のため、スマートフォン・タブレット・PCでも利用しやすいサンプルです。
免責事項 本コードの利用により発生した損害について、当サイトは一切の責任を負いません。
デモ
「トーストを表示」をクリックするとトーストが表示され、3秒後に自動で非表示になります。表示中にもう一度クリックすると時間をリセットして再表示されます。
コードをコピーして使おう!
<!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="auto-hide-toast_wrap">
<!-- タイトル -->
<div class="auto-hide-toast_title">
指定時間後にトーストを非表示にする
</div>
<!-- 説明文 -->
<p class="auto-hide-toast_text">
ボタンをクリックするとトーストが表示され、3秒後に自動で非表示になります。
</p>
<!-- トースト表示ボタン -->
<button
type="button"
class="auto-hide-toast_button"
data-auto-toast-open>
トーストを表示
</button>
</div>
<!-- トースト本体 -->
<div
class="auto-hide-toast_message"
data-auto-toast>
保存しました
</div>
<!-- JavaScriptファイル -->
<script src="script.js"></script>
</body>
</html>
サンプル一式を取得する場合 HTML・CSSなどすべてのファイルが必要な場合は、「サンプル一式をダウンロード」をクリックしてください。
Q ダウンロードしたけど、これをネット上で動かすにはどうするの?
Googleアカウントがあれば、InfinityFreeで無料サーバーを作成して、ダウンロードしたサンプルをネット上で動かせます。
InfinityFreeを初めて利用する場合は①から、すでにサーバーを作成している場合は②へ進んでください。
ファイル構成と設置方法
このサンプルはHTML・CSS・JavaScriptの3ファイルで構成されています。HTMLではトーストを表示するボタンと通知メッセージを作成し、CSSではトーストの表示位置、背景色、余白、角丸、影、表示・非表示時の見た目を設定します。JavaScriptではボタンをクリックするとトーストを表示し、3秒が経過すると自動で非表示にします。
sample/
├── index.html
├── style.css
└── script.js
各ファイルの役割
index.htmlはトースト全体を構成するファイルです。「指定時間後にトーストを非表示にする」のタイトル、説明文、「トーストを表示」のボタン、トースト内の「保存しました」というメッセージを変更できます。
style.cssはトーストと表示ボタンのデザインを設定するファイルです。表示エリアの横幅や余白、ボタンの背景色、トーストの表示位置、背景色、文字色、角丸、影などを変更できます。また、opacityとtransformを使用して、トーストの表示・非表示を切り替えています。
script.jsはトーストの表示と指定時間後の非表示を制御するファイルです。ボタンをクリックするとis-showクラスを追加してトーストを表示し、setTimeout()で3秒待機したあとにクラスを削除して非表示にします。表示中にもう一度ボタンをクリックした場合は、clearTimeout()で実行中のタイマーを解除してから新しく3秒を計測します。
設置方法・使い方
sampleフォルダへindex.html、style.css、script.jsを配置します。3つのファイルを同じ階層へ保存したあと、sample/index.htmlをブラウザで開いてください。
「トーストを表示」ボタンをクリックすると、画面右下へ「保存しました」というトーストが表示されます。表示されてから3秒が経過すると、自動的にトーストが非表示になります。表示中にもう一度ボタンをクリックすると待機時間がリセットされ、その時点から再び3秒が計測されます。
カスタマイズできる内容
index.htmlではタイトル、説明文、ボタンの文字、トーストに表示する「保存しました」のメッセージを変更できます。用途に合わせて、送信完了、更新完了、登録完了などの通知へ変更できます。
style.cssでは表示エリアの横幅や余白、ボタンの背景色や角丸、トーストの表示位置、背景色、文字色、内側余白、角丸、影などを変更できます。トーストはrightとbottomによって画面右下からの位置を調整できます。
script.jsでは、トーストを非表示にするまでの時間を変更できます。setTimeout()に指定している3000を変更することで、用途に合わせてトーストの表示時間を調整できます。
数値調整
script.js
3000
トーストを表示してから非表示にするまでの待機時間です。JavaScriptでは1000ミリ秒が1秒なので、3000は3秒を表します。5秒後に非表示にする場合は5000、10秒後にする場合は10000へ変更します。値を大きくすると長く表示され、小さくすると早く非表示になります。
style.css
max-width:700px;
トースト表示エリアの最大横幅です。値を大きくすると横へ広がり、小さくするとコンパクトになります。
margin:40px auto;
表示エリアの上下余白です。40pxを大きくすると上下の間隔が広がり、小さくすると狭くなります。
padding:32px;
表示エリアの内側余白です。値を大きくすると内容と外枠の間隔が広がります。
border-radius:18px;
表示エリアの角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
font-size:22px;
タイトルの文字サイズです。値を大きくすると文字が大きくなり、小さくすると控えめになります。
padding:12px 24px;
トースト表示ボタンの内側余白です。上下の12pxを大きくするとボタンが高くなり、左右の24pxを大きくすると横へ広がります。
border-radius:8px;
トースト表示ボタンの角丸です。値を大きくすると丸みが強くなります。
right:24px;
トーストと画面右端の間隔です。値を大きくすると画面右端から内側へ移動します。
bottom:24px;
トーストと画面下端の間隔です。値を大きくするとトーストが上方向へ移動します。
padding:14px 18px;
トースト本体の内側余白です。上下の14pxを大きくすると高さが増え、左右の18pxを大きくすると横幅が広がります。
border-radius:10px;
トースト本体の角丸です。値を大きくすると丸みが強くなり、0にすると四角になります。
box-shadow:0 12px 30px rgba(0,0,0,.18);
トースト本体の影です。12pxや30pxを変更すると、影の位置や広がりを調整できます。
transform:translateY(12px);
非表示時のトーストを通常位置から下へ12px移動させています。値を大きくすると表示・非表示時の移動量が大きくなります。
transition:.3s;
トーストの表示・非表示が切り替わる時間です。0.3秒で変化します。値を大きくするとゆっくり、小さくすると速く切り替わります。
レスポンシブ対応
このサンプルはレスポンシブ対応です。style.cssのwidth:100%とmax-width:700pxによって、画面幅に合わせてトースト表示エリアが縮小されます。また、画面幅640px以下ではpadding:24px 18px;へ変更して内側余白を小さくしているため、スマートフォン・タブレット・PCで利用できます。
コメント