102. Loading States(読み込み状態の全パターン:ユーザーを「退屈」させない演出術)
原理:待ち時間を「体験」に変える
待たされる時間は、実際より長く感じる
行列のできるお店で、「あと何分です」と言われないまま待たされるのは苦痛です。しかし、メニューを渡されたり、中を覗けたりすれば、同じ10分でも短く感じます。 Webアプリも同じです。通信中の「ローディング状態(Loading States)」をいかにデザインするかは、ユーザーがあなたのアプリを「速い」と感じるか「遅い」と感じるかを決める、非常に重要な要素です。
HTMXには、ただ「ぐるぐる(スピナー)」を出すだけではない、多彩なローディング演出のための機能が備わっています。
実践:状況に合わせた「待ち方」のバリエーション
1. インジケーターの表示(復習と応用)
第5章(093.)で学んだ hx-indicator です。これは「何かを出す」ための基本です。
2. 要素の無効化(ボタンの連打防止)
通信中にボタンを薄くしたり、クリックできなくしたりして、二重送信を防ぎつつ「今頑張ってるよ」と伝える例です。
/* 通信中のボタンの見た目 */
.htmx-request {
opacity: 0.5;
pointer-events: none; /* クリックを無効化 */
cursor: wait; /* マウスカーソルを待機状態に */
}
3. テキストの変更
ボタンの文字そのものを「保存する」から「保存中...」に変えてしまう、非常に直感的な手法です。これはCSSの content プロパティを使ってHTMXのクラスと組み合わせることで、JavaScriptなしで実現できます。
button.htmx-request {
color: transparent; /* 元の文字を消す */
}
button.htmx-request::after {
content: "送信中...";
color: black;
position: absolute; /* ボタンの中央に配置 */
/* ...レイアウト調整... */
}
比較:どのローディング演出を選ぶべきか?
| 演出タイプ | 特徴 | おすすめの場面 |
|---|---|---|
| スピナー | 最も一般的。 | 重いデータの読み込み。 |
| テキスト変更 | 非常に分かりやすい。 | 送信、登録ボタン。 |
| スケルトン | 期待感を高める。 | ダッシュボード、リスト表示。 |
| 進捗バー | 残り時間が明確。 | ファイルのアップロード。 |
まとめ:初心者のための「配慮」のパターン
ローディング状態をデザインすることは、ユーザーへの「おもてなし」そのものです。
- 0.2秒の壁: 0.2秒以内に終わる通信なら、インジケーターは出さないほうがいいかもしれません(パッと出すぎて目がチカチカするため)。
- 「どこ」を変えるか: データを読み込む場所そのものを変えるのか、ボタンを変えるのか。ユーザーの視線がいまどこにあるかを考えて配置しましょう。
- 一貫性が大事: アプリ全体でローディングの出し方を統一することで、ユーザーは「あ、これが出ている間は待てばいいんだな」と学習してくれるようになります。
退屈を、安心へ。多彩なローディング状態を使いこなして、待ち時間さえも心地よいリズムの一部に変えてしまう、魅力的なWebアプリを構築してください。次の記事では、さらに具体的に進捗を見せる「プログレスバーの実装(103. Progress Bars)」をご紹介します。