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