よく言われるように、優れた記憶力は悪いペンほど優れていません。多くの技術的な記事を完全に理解していないと、すぐに技術的な内容を忘れてしまいます。エディターは通常閲覧しており、私があなたと共有するためにまとめたメモです。
開発プロセス中、私たちは皆、他の人の成熟したフレームワークを使用することを望んでいます。なぜなら、巨人の肩に乗ることで開発の効率が大幅に向上するからです。しかし、私たちはその基本原則も理解する必要がありますし、理解する必要があります。たとえば、DOM イベントの場合、jquery フレームワークは、さまざまなブラウザーのさまざまな動作をカプセル化して抽象化するのに役立ち、イベント処理に大きな利便性をもたらします。しかし、ブラウザは徐々に統一化・標準化が進み、公式に標準化されたインターフェースをより安全に利用できるようになりました。なぜなら、多くの開発者の心を掴むことによってのみ、ブラウザーはさらに前進できるからです。下位バージョンのブラウザを使用して特定のページを開くのと同じように、そのページにアクセスするには Chrome などの高度なブラウザを使用するように指示されます。しかし、これは革命的なプロセスであり、私たちのウェブページをより多くの人に提供するためには、これらの歴史的問題とよりよく適合する必要があります。互換性を保つには、フレームワークに依存するだけでなく、その基本原則を理解する必要があります。
DOM イベントの 3 つのステージ
DOM イベントがトリガーされると、オブジェクト自体で 1 回トリガーされるだけではなく、次の 3 つの異なる段階を経ます。
1. キャプチャ フェーズ : まず、ドキュメントのルート ノード ドキュメントからイベント トリガー オブジェクトに移動し、イベント オブジェクトを外側からキャプチャします。
2. ターゲットステージ : ターゲットイベントの場所 (インシデントが発生した場所) に到着し、イベントをトリガーします。
3. バブル ステージ: 次に、ターゲット イベントの場所からドキュメントのルート ノードまでトレースバックし、イベント オブジェクトを内側から外側にバブルします。
引用元:
http://www.w3.org/TR/DOM-Level-3-Events/#event-flow実験部分
オンライン エディタを開きます:
http://jsbin.com/goqede/edit?html,css,js,output
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-"> <title>Document</title> <style> #outer{ text-align: center; width: px; height: px; background-color: #ccc; margin: auto; } #middle{ width: px; height: px; background-color: #f; margin: auto; } #inner{ width: px; height: px; background-color: #f; margin: auto; border-rad } </style> </head> <body> <div id='outer'> <span>outer</span> <div id='middle'> <span>middle</span> <div id='inner'> <span>inner</span> </div> </div> </div> <script> function $(element){ return document.getElementById(element); } function on(element,event_name,handler,use_capture){ if(addEventListener){ $(element).addEventListener(event_name,handler,use_capture); } else{ $(element).attachEvent('on'+event_name,handler); } } on("outer","click",o_click_c,true); on("middle","click",m_click_c,true); on("inner","click",i_click_c,true); on("outer","click",o_click_b,false); on("middle","click",m_click_b,false); on("inner","click",i_click_b,false); function o_click_c(){ console.log("outer_捕获"); alert("outer_捕获"); } function m_click_c(){ console.log("middle_捕获") alert("middle_捕获"); } function i_click_c(){ console.log("inner_捕获") alert("inner_捕获"); } function o_click_b(){ console.log("outer_冒泡") alert("outer_冒泡"); } function m_click_b(){ console.log("middle_冒泡") alert("middle_冒泡"); } function i_click_b(){ console.log("inner_冒泡") alert("inner_冒泡"); } </script> </body> </html>
アウターキャプチャ
middle_capture
インナーキャプチャ
インナーバブル
middle_bubble
アウターバブル
イベント要素に到達するまで、まず外側から内側に向かってイベントがキャプチャされ、その後内側から外側に向かってルート ノードまでバブルアップしていることがわかります。
ヒント:対象ステージでイベントがトリガーされると、イベント登録の順序に従って実行されます。他の 2 つのステージでの登録順序は、イベントの実行順序には影響しません。つまり、バブリングイベントとキャプチャイベントの両方がここに登録されている場合、登録された順に実行されます。
たとえば、上記の順序に従って「inner」をクリックすると、実際に必要な答えが表示されます。
、イベント登録シーケンスが次のコードに変更された場合:
外側をクリックすると:
中央をクリックすると:
内側をクリックすると:
対象ステージのイベント要素に対するイベントの実行順序は、イベント登録の順序によって決まることがわかります
上記の内容は、この記事のDOMイベントステージとイベントキャプチャとイベントバブリングの実行シーケンスです(詳細な写真とテキスト)が、皆様の今後の仕事や勉強に役立つことを願っています。