Select要素のフォーカス時に自動スクロールを抑制
WebAwesomeのSelect要素で、オプションにフォーカスを当てる際の自動スクロールを抑制する変更が行われました。この変更により、ドロップダウン開閉時に発生していた意図しないスクロール動作が解消されます。
背景
#2075で報告された、ドロップダウン開閉時の意図しないスクロール問題を解消するための変更です。近年のブラウザにおけるフォーカス動作の変更により、Select要素のドロップダウンを開閉する際にページが意図せずスクロールする現象が発生していました。
#2075では、スクロール制御は既存のライブラリによって管理されているため、フォーカス時の追加のスクロールを防ぐ必要があることが示されていました。
技術的な変更
packages/webawesome/src/components/select/select.ts の setCurrentOption メソッドで、オプションにフォーカスを当てる際のパラメータが変更されました。
変更前:
option.focus();
変更後:
option.focus({ preventScroll: true });
preventScroll: true オプションを指定することで、フォーカス移動時のブラウザによる自動スクロールを無効化しています。この変更により、既存のスクロール管理機構が管理するスクロール動作のみが適用され、新しいブラウザのフォーカス動作との競合が解消されます。
変更箇所は1行のみであり、既存のフォーカス管理ロジック(currentOptionの設定、current属性の更新、tabIndexの設定)には影響を与えません。
設計判断
ブラウザの自動スクロールを無効化し、既存のスクロール管理機構に一任する方式が採用されました。
#2075で示されているように、スクロール制御は既存のライブラリによって管理されています。preventScrollオプションの追加により、ブラウザレベルの自動スクロールを抑制し、既存のスクロール管理機構による制御に統一されています。
この判断は、既存のスクロール管理機構を尊重しつつ、新しいブラウザのフォーカス動作との互換性を確保するための最小限の変更といえます。
まとめ
本PRは、近年のブラウザにおけるフォーカス動作の変更に対応し、Select要素のドロップダウン開閉時のスクロール制御を既存のライブラリに一元化する変更です。1行のパラメータ追加により、ブラウザと既存のスクロール管理機構間のスクロール制御の競合を解消し、安定したユーザー体験を実現しています。