サンプル
<input type= 'number' />
といった数値入力の入力フォームがあるとします。
画面上でこの入力フォームにフォーカスし、マウスをスクロールすると数値が入力されてしまう場合があります。
解決策
これを無効にするには、e.preventDefault();だけでは無効にできません。
.addEventListenerの第3引数でpassive: falseが必要になります。
passive: falseは、リスナー内で e.preventDefault() を呼ぶ可能性がある。という意味になります。
passive: true(デフォルト値)は、リスナー内で e.preventDefault() は呼ばない。という意味になります。(リスナーの実行を待たずデフォルト動作を実行します。* パフォーマンスの向上になる)
なので、<input>に、フォーカス時にこのpassiveをfalseにさせます。
<input
type= 'number'
onFocus={(e) =>
e.target.addEventListener(
'wheel',
(e) => {
e.preventDefault();
},
{ passive: false }
)
}
/>
これで入力フォームがフォーカスされている時のマウススクロールが無効化され、数値が入力されません。
以上が解決方法でした。
参考にした記事