htmlの入力フォームにリアルタイム検索とFEP(フロントエンドプロセッサ)の挙動。
https://youtu.be/NYJgymLON2Q?t=840
確かに昔はよく合った問題だが、最近は何も考えずに実装できてるよな・・・
俺の組んでいるsvelteで入力フォームでのFEP(IME等)の挙動が正常なので、実装を確認した。
「入力中(IME未確定状態)なのに、バックグラウンドで検索が走り、かつIME入力も邪魔されない」 という点ですね。これは以下の3つの要素が組み合わさって実現されています。Svelteの bind:value={query} は、ブラウザの input イベントを監視しています。現代のブラウザでは、IMEで文字を打っている最中(未確定の「やま」の状態)でも input イベントが発生し、その内容がリアルタイムで変数 query に反映されます。これにより、変換キーを押す前の「ひらがな」の状態で検索を開始できます。2. 0.25秒の「待機時間」 (Debounce)
これがIME入力をスムーズにしている最大の要因です。文字が入力されるたびに即座にAPIを叩くと、処理が重くなり入力がカクつく原因になりますが、この実装では 「入力が止まってから0.25秒後に検索する」 という制御(Debounce)が入っています。「やま」と素早く打っている間は検索が走らず、打ち終わって一瞬手が止まったタイミングで検索が走るため、IMEの入力を邪魔しません。検索結果(suggestions)が返ってきたとき、このプログラムは入力欄(query)の中身を一切いじりません。単に候補リスト(ドロップダウン)を表示するだけです。もしここでプログラムが「検索結果に合わせて入力欄の文字を補完する」ような動きをすると、IMEの未確定文字が確定されてしまったり消えたりしますが、「入力欄はユーザーに任せて、結果は下に表示するだけ」 という実装になっているため、IME変換を継続したまま検索結果を見ることができます。まとめ
- Svelteの機能: 未確定の文字もリアルタイムで変数に取り込む。
- Debounce: 入力中は検索を我慢し、手が止まったら裏でこっそり検索に行く。
- 表示の分離: 検索結果が出ても入力欄には触らないので、IMEが途切れない。
この組み合わせにより、「入力しながら(変換しながら)検索結果が出る」という体験になっています。
0 件のコメント:
コメントを投稿