画像をクリックすると、対応するIMG要素だけでなく、祖父のLiなどのクリックイベントを生成するだけでなく、すべての要素の祖先を通り抜けてから、ウィンドウオブジェクト。
イベントターゲットであり、クリックが発生した最も内側の要素です。イベントターゲットとその先祖は、親からウィンドウオブジェクトまで、DOMツリーに枝を形成します。たとえば、画像ギャラリーでは、このブランチはノードで構成されます:img、a、li、ul、body、html、document、ウィンドウ。
ウィンドウは実際にはdomノードではなく、イベントのインターフェイスを実装することに注意してください。そのため、簡単にするために、ドキュメントオブジェクトの親ノードのように処理しています。同じイベントタイプのノードに複数のリスナーを登録できることを忘れないでください。伝播がそのようなノードの1つに到達すると、リスナーは登録の順に呼び出されます。このブランチは、イベントが伝播する(または流れる)道であるため、重要です。この伝播は、ブランチのノードに添付された、特定のイベントタイプのすべてのリスナーを呼び出すプロセスです。各リスナーは、イベントに関連する情報を収集するイベントオブジェクトで呼び出されます(詳細については、後で詳しく説明します)。
ブランチの決定は静的であることに注意する必要があります。つまり、イベントの最初の派遣で確立されています。イベント処理中に発生するツリーの変更は無視されます
伝播は、窓からイベントのターゲット、バックまで、双方向です。この伝播は、3つのフェーズに分類できますウィンドウからイベントへのターゲットの親:これは
キャプチャフェーズです
イベントターゲット自体:これは
ターゲットフェーズこのフェーズでは、キャプチャフラグの値に関係なく、イベントターゲットに登録されているすべてのリスナーが呼び出されます。 イベントバブルフェーズ
すべてのイベントは、キャプチャフェーズ、フォーカス、ぼやけ、負荷などでイベントターゲットに流れ込んでいるが、バブルアップしないことに注意してください。つまり、彼らの旅行はターゲット
フェーズの後に停止します。<span><span><span><ul</span>></span> </span> <span><span><span><li</span>></span><span><span><a</span> href<span>="..."</span>></span><span><span><img</span> src<span>="..."</span> alt<span>=""</span>></span><span><span></a</span>></span> </span> <span><span><span><li</span>></span><span><span><a</span> href<span>="..."</span>></span><span><span><img</span> src<span>="..."</span> alt<span>=""</span>></span><span><span></a</span>></span> </span> ... <span><span><span><li</span>></span><span><span><a</span> href<span>="..."</span>></span><span><span><img</span> src<span>="..."</span> alt<span>=""</span>></span><span><span></a</span>></span> </span><span><span><span></ul</span>></span> </span>
したがって、伝播の終わりに、ブランチの各リスナーは正確に1回呼び出されました。
イベントバブルは、あらゆる種類のイベントで行われません。伝播中、リスナーは、イベントオブジェクトの.bubbles booleanプロパティを読んでイベントが泡立つかどうかを知ることができます。
3つのイベントフローフェーズは、W3C ueivents仕様の次の図に示されています。
Copyright©2016 World Wide Web Consortium(MIT、Ercim、Keio、Beihang)。
伝播情報へのアクセス
e.targetは、イベントターゲットを参照しています。
イベントオブジェクトのStopPropagationメソッドを呼び出すことにより、イベントの伝播を任意のリスナーで停止できます。これは、現在のターゲットに続く伝播パスのノードに登録されたすべてのリスナーが呼び出されないことを意味します。代わりに、現在のターゲットに添付されている他のすべてのリスナーは引き続きイベントを受け取ります。
この動作は、以前のデモの単純なフォークで確認できます。リスナーの1人にStopPropagation()への呼び出しを挿入するだけです。ここで、この新しいリスナーを、ウィンドウに登録されているコールバックのリストのキャプターとして準備しました:
このように、どんなボックスがクリックされても、伝播は早期に停止し、ウィンドウ上の捕獲者のリスナーだけに到達します。
即時伝播を停止<span><span><span><ul</span>></span> </span> <span><span><span><li</span>></span><span><span><a</span> href<span>="..."</span>></span><span><span><img</span> src<span>="..."</span> alt<span>=""</span>></span><span><span></a</span>></span> </span> <span><span><span><li</span>></span><span><span><a</span> href<span>="..."</span>></span><span><span><img</span> src<span>="..."</span> alt<span>=""</span>></span><span><span></a</span>></span> </span> ... <span><span><span><li</span>></span><span><span><a</span> href<span>="..."</span>></span><span><span><img</span> src<span>="..."</span> alt<span>=""</span>></span><span><span></a</span>></span> </span><span><span><span></ul</span>></span> </span>
今、ログテーブルには出力はありません。C1とC2のウィンドウキャプチャラーは、新しいリスナーの実行後に伝播が停止するためです。
イベントキャンセルイベントオブジェクトのさらに別のメソッド、E.PreventDefaultをリスナーに呼び出すことにより、イベントキャンセルでそのようなデフォルトアクションの実行を回避することができます。
結論それで、JavaScriptでイベントの泡立ちとイベントの作品がどのように作業をしているかを示したいと思います。ご質問やコメントがある場合は、以下の議論で聞いてうれしいです。
イベントの泡立ちとイベントキャプチャの主な違いは何ですか?イベントバブリングとイベントキャプチャは、イベントが別の要素内の要素で発生したときのイベント伝播の2つの方法と両方です。要素は、そのイベントのハンドルを登録しています。主な違いは、DOMツリーに対するイベントの伝播方向にあります。イベントでは、イベントは最初に最も深いターゲット要素をトリガーし、次にその両親に泡立ちます。一方、イベントキャプチャには、両親から始まるターゲット要素に向けてイベントが含まれます。 StopPropagation()メソッドを使用してバブリング。この方法は、キャプチャ間および泡立つ段階での現在のイベントのさらなる伝播を防ぎます。例は次のとおりです。
element.addeventlistener( 'click'、function(event){JavaScriptでのイベントの泡立ちの実際的な使用は何ですか?たとえば、いくつかの子要素を持つ親要素があり、これらすべての要素で特定のイベントを聞きたい場合は、イベントリスナーを親に設定して、イベントバブルを利用できます。このようにして、イベントが子要素にトリガーされるたびに、それは親に泡立ち、そこでそれを処理できます。
はい、イベントバブルとキャプチャの両方を同時に使用できます。これはイベント代表団として知られています。これは、イベントリスナーを個々の子要素に設定する代わりに、イベントの処理を親要素に委任するテクニックです。これは、多数の子要素がある場合に特に役立ちます。
JavaScriptのイベント伝播のデフォルト動作はイベントバブルです。これは、デフォルトでは、イベントがターゲット要素から開始され、ドキュメントのルートまでバブルが始まることを意味します。ただし、UseCaptureパラメーターをTrueに設定したAddEventListener()メソッドを使用してこの動作を変更できます。これにより、イベントキャプチャが可能になります。イベントはネストされた要素から発射され、イベントはDOMツリーのネストされた要素の祖先を通して伝播します。これはイベントバブルです。各祖先は順番にイベントに対応する機会を得ます。この伝播は、ドキュメントのルートに到達するか、stoppropagation()が呼び出されるまで続きます。 PreventDefault()メソッドを使用して、イベントバブルでのイベントのデフォルトアクション。この方法は、キャンセル可能な場合にイベントをキャンセルします。つまり、イベントに属するデフォルトのアクションは発生しません。 JavaScriptでは、位相、ターゲットフェーズ、およびバブルフェーズをキャプチャしています。キャプチャ段階では、イベントは要素に至ります。ターゲットフェーズは、イベントがターゲット要素に到達した場所です。バブルフェーズは、イベントが要素から泡立つときです。
以上がjavascriptで泡立つイベント?イベントの伝播が説明されましたの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。