少し行き詰まっていて、なぜこのコードが実際にマウスホイールイベントをインターセプトして、数値エディターが数値を変更するために解釈するのを防ぐのかよくわかりません。 なぜイベントのキャプチャとフィルタリングのインターセプトが機能しないのかを理解したいのですが:
HTMLコード:
リーリーJavaScript コード:
リーリー手順: 入力した番号をクリックしてフォーカスし、マウス ホイールを使用します。マウス ホイールは JavaScript コードによってインターセプトされますが、キャプチャ フェーズ中に周囲の
への伝播を停止しても、数値は依然として変化します。
参考までに: https://jsfiddle.net/Ljku4gha/6/
デフォルトの数値入力フィールド (実際にはスライダー) を使用して再利用可能なコンポーネントを作成したいと考えています。ユーザーがこれらの入力でスクロール ホイールを使用して数値を変更できるようにしたくありません。代わりに、マウスホイールは、スクロール目的でその周囲の (未知の!) div (おそらく) でイベントをトリガーする必要があります。したがって、数値エディター (およびスライダー) が何らかの方法でマウス ホイール イベントを処理しないようにしたいと考えています。
完全に説明することはできませんが、何が起こっているのかについては 2 つの仮説があります。 私の最初の考え、そして最も可能性が高いと思うのは、これはブラウザーがユーザー イベント (キーワード「ユーザー エージェント」だと思います) を処理する方法の成果物であるということです。ただし、ブラウザがユーザー イベントをどのように処理するかについてどこで読めるかを誰かが指摘してくれれば、それは大歓迎です。それまで、ブラウザでのイベント処理についての私の理解は次のとおりです。
ユーザーがマウスホイールをスクロールする
しかし、私はこの理論が最も理にかなっていると思いますが、もしかしたら完全に間違っているのではないでしょうか? !
別の退屈な説明: 私は間違ったイベントを聞いているのでしょうか?
私は主に、自分がやっていることがうまくいかない理由を理解するのに役立つガイダンスを得たいと思っています...そして、解決策も歓迎します。
数値入力のデフォルト動作を防止するには、
event.preventDefault()
を使用します。改善点が 2 つあります:
キャプチャではこの問題を解決できません。理由は
残念ながら、デフォルトの動作をキャプチャすると、イベントが入力にバブルアップする前に発生します。
したがって、
stopPropagation()
はキャプチャフェーズでは役に立ちません。