076. Settle Timing(追加後の落ち着き:配置が終わったあとの「一呼吸」を置く)
原理:新しいパーツが「馴染む」までの時間
配置された直後の嵐
HTMXがサーバーから届いた新しいHTMLを画面に追加(Swap)した直後、ブラウザの内部では非常に忙しい処理が走ります。 - 新しい要素にCSSを適用する。 - 要素の正確な位置(高さや幅)を計算する。 - フォームのオートフォーカスなどを実行する。
「Settle Timing(セトル・タイミング)」とは、「HTMLを画面に配置したあと、HTMXが『よし、これで完璧だ』と判断して処理を完了させるまでの待ち時間」のことです。
「Settle」には「落ち着く」「定着する」という意味があります。この「落ち着くまでの時間」をあえて設けることで、配置された直後にブラウザが計算を行う余裕を与え、その後のアニメーションやJavaScriptの処理をスムーズに繋げることができます。
実践:配置のあとの「仕上げ」をコントロールする
1. 20ミリ秒の「落ち着き」を設定する(デフォルト)
HTMXでは標準で 20ms(0.02秒)の settle 時間が設定されています。これは、ブラウザが新しいHTMLを正しく認識し、CSSを反映させるのに最低限必要な時間です。通常はこのままで問題ありません。
2. あえて長く待つ設定(settle:500ms)
新しい要素が表示された瞬間に、JavaScriptで何か特別な処理をしたいけれど、ブラウザの描画が追いついていないせいで失敗する……といった稀なケースで、この時間を延ばすことがあります。
<!--
hx-swap: innerHTML
settle:500ms : 配置が終わったあと、0.5秒待ってから「完了」イベントを発火させる。
-->
<div hx-get="/api/new-data" hx-swap="innerHTML settle:500ms">
更新ボタン
</div>
3. ステップ・バイ・ステップ解説
- 問題の発見: 「新しいHTMLは表示されているのに、直後に動かしたいJavaScriptがうまく要素を見つけてくれない」といった場合に検討します。
- 時間の指定:
hx-swapの中で、swap:◯◯msのあとにsettle:◯◯msと書き足します。 - イベントの確認:
htmx:afterSettleというイベントが、この指定した時間が経過したあとに発火します。
比較:Swap Timing vs Settle Timing
Swap Timing (075)
- いつ待つ?: 通信が終わってから、画面を書き換える前。
- 目的: 消えるときのアニメーションを見せるため。
Settle Timing (今回)
- いつ待つ?: 画面を書き換えたあと、処理を完了するまで。
- 目的: 新しい要素にCSSを馴染ませたり、JSの準備を整えるため。
まとめ:初心者のための「定着」の意識
settle のタイミングは、いわば「ペンキが乾くのを待つ時間」のようなものです。
- 透明な潤滑油: ほとんどの場合、あなたは
settleを意識する必要はありません。HTMXがデフォルトで設定している20msという絶妙な時間が、あなたのアプリを裏側で滑らかに動かしてくれています。 - アニメーションとの連携: 新しい要素が「現れる(Fade In)」アニメーションをCSSで作る際、この
settle時間が経過するまでの間にhtmx-added(087.解説予定)というクラスが付与される仕組みになっています。 - 安定感の秘訣: 画面にパッと出すだけでなく、一呼吸置いて「落ち着かせる」。この配慮が、複雑なスクリプトやCSSと組み合わせた時の「壊れにくさ」に繋がります。
配置したあとの微調整。settle という静かな時間を知ることで、あなたはHTMLの背後で流れるブラウザの鼓動をより深く理解し、制御できるようになります。次の記事では、届いたHTMLから「欲しいとこだけ」を抜き出す「hx-select」(077. hx-select)の深掘り記事をお届けします。