コンテンツにスキップ

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. ステップ・バイ・ステップ解説

  1. 問題の発見: 「新しいHTMLは表示されているのに、直後に動かしたいJavaScriptがうまく要素を見つけてくれない」といった場合に検討します。
  2. 時間の指定: hx-swap の中で、swap:◯◯ms のあとに settle:◯◯ms と書き足します。
  3. イベントの確認: 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)の深掘り記事をお届けします。