1. イベントの流れ
1. コンセプトイベント伝播プロセスは 2. DOMイベントフローDOM イベントにもプロセスがあります。イベントのトリガーからイベントの応答までには 3 つの段階があります。
上記の例では、コンピューターの電源を入れるプロセスは、 イベント ソーシングについて理解できたので、次は 3 つのプロセスを見てみましょう。 イベントキャプチャ:
イベント キャプチャは、イベント フローの最初のステップです。 ターゲットフェーズ: イベントがターゲット ノードに到達すると、イベントはターゲット フェーズに入ります。イベントはターゲット ノードでトリガーされます。 イベントバブリング: イベント バブリングは、イベント キャプチャの逆の順序で行われます。イベントキャプチャの順序は外側から内側へ、イベントバブリングの順序は内側から外側へです。 例を見てみましょう。box3 をクリックすると、box2 と box1 のクリック イベントがトリガーされます。 <!DOCTYPE html> <html> <ヘッド> <メタ文字セット="UTF-8"> <title>JavaScript イベント バブリング</title> </head> <スタイル タイプ="text/css"> #box1 { 背景: 青紫;} #box2 {背景: アクアマリン;} #box3 {背景: トマト;} div { パディング: 40px; マージン: 自動;} </スタイル> <本文> <div id="box1"> <div id="box2"> <div id="box3"></div> </div> </div> <スクリプト> window.onload = 関数(){ 定数 box1 = document.getElementById('box1') 定数 box2 = document.getElementById('box2') 定数 box3 = document.getElementById('box3') box1.onclick = sayBox1; box2.onclick = sayBox2; box3.onclick = sayBox3; 関数 sayBox3() { console.log('最も内側のボックスをクリックしました'); } 関数 sayBox2() { console.log('中央のボックスをクリックしました'); } 関数 sayBox1() { console.log('一番外側のボックスをクリックしました'); } } </スクリプト> </本文> </html>
最新のブラウザはすべて、 イベント フローの 3 つの段階がわかったところで、この機能を使って何ができるでしょうか? 2. イベントの委任
<ul id="myUl"> <li>項目 1</li> <li>項目 2</li> <li>項目 3</li> ... </ul> まだ少しわかりにくいかもしれません。簡単に言うと、イベントバブリングを使用して要素のイベントをその親に委任することです。 実生活の例を挙げると、11 月には速達便が届きます。通常、宅配業者は宅配便を各家庭に戸別配達しますが、これは非効率的です。宅配業者は、コミュニティ内のすべての速達便をコミュニティ内の宅配ステーションに置き、速達便の配達を委託するというアイデアを思いつきました。コミュニティ内の受取人は、ピックアップ コードを使用して宅配ステーションに行き、速達便を受け取ることができます。 しかし、これを行うことでどのようなメリットがあるのでしょうか? 1. イベント委託のメリットイベント委任には2つの利点がある
メモリ消費量を削減し、ページパフォーマンスを最適化します
上記の イベントを動的にバインドする: 子要素が不確実であるか動的に生成される場合は、子要素を監視する代わりに親要素を監視することができます。 イベント委譲を使用すると、各 イベント委任の利点がわかったところで、それをどのように使用すればよいのでしょうか? 2. イベント委任の使用イベント委任を使用するには、イベント監視用の 使用法: 要素にイベントリスナーを追加します(イベントタイプ、関数、キャプチャの使用);
3番目のパラメータ
次の例を見てください。 <!DOCTYPE html> <html> <ヘッド> <メタ文字セット="UTF-8"> <title>JavaScript イベント委譲</title> </head> <本文> <ul> <li>項目 1</li> <li>項目 2</li> <li>項目 3</li> <li>項目 4</li> </ul> <スクリプト> const myUl = document.getElementsByTagName("ul")[0]; myUl.addEventListener("クリック", myUlFn); 関数 myUlFn(e) { if (e.target.tagName.toLowerCase() === 'li') { // クリックする要素かどうかを判断します console.log(`You clicked ${e.target.innerText}`); } } </スクリプト> </本文> </html>
イベント バブリングは、非常に便利な場合もありますが、煩わしい場合もあります。必要がない場合はキャンセルできますか? 3. イベントのバブリングとキャプチャを禁止する
バブリングとキャプチャを無効にするには、 戻り値やパラメータがないため、使い方も非常に簡単です。 イベントの伝播を停止します。 上記のイベント バブリングの例を少し変更した次の例を参照してください。 <div id="box1"> <div id="box2"> <div id="box3"></div> </div> </div> <スクリプト> 定数 box1 = document.getElementById('box1') 定数 box2 = document.getElementById('box2') 定数 box3 = document.getElementById('box3') box1.onclick = sayBox1; box2.onclick = sayBox2; box3.onclick = sayBox3; 関数 sayBox3() { console.log('最も内側のボックスをクリックしました'); } 関数 sayBox2(e) { console.log('中央のボックスをクリックしました'); e.stopPropagation(); //イベントキャプチャとバブリングを無効にする} 関数 sayBox1() { console.log('一番外側のボックスをクリックしました'); } </スクリプト> イベントが JavaScript イベント キャプチャ バブリングとキャプチャの詳細に関するこの記事はこれで終わりです。JavaScript イベント キャプチャ バブリングとキャプチャに関するより関連性の高いコンテンツについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。 IV. 参考文献MDN 中国語版 https://developer.mozilla.org/zh-CN/ 以下もご興味があるかもしれません:
|
<<: 訪問者を惹きつけるウェブサイトコンテンツを作成する14の方法
>>: Zabbix Agent2を使用してOracleデータベースを監視する方法
この記事はMySQL 8.0.12のインストールと設定に関する詳細なチュートリアルを記録しています。...
1 問題の説明Vue3 の統合 API は、defineComponent やその他の関数が認識でき...
目次1. グループクエリの概略図2. groupbyキーワード構文の詳細な説明3. 簡単なグループク...
目次1. はじめに2. Viteプロジェクトを作成する1. viteをインストールする2. プロジェ...
目次1. マージインターフェース1.1 非関数メンバー1.2 関数メンバー序文:今日お話ししたいのは...
この記事では ソースコードのオンラインプレビューとダウンロード今日のチュートリアルでは、円のホバー効...
目次序文1. wgetを使用して単一のファイルをダウンロードする2. wget -Oを使用してダウン...
最近、Vue のソースコードを勉強していて、Vue で親コンポーネントと子コンポーネント間でデータを...
事前に言っておくDocker を使用すると非常にシンプルなデプロイメント環境を実現できることは誰もが...
この記事の例では、WeChatアプレットの日付と時刻コンポーネントの具体的なコードを参考までに共有し...
目次序文文章プリミティブ型プリミティブ値ラッパーオブジェクト物体コンストラクタ通常機能(関数)プリミ...
springmvc による Spring の統合Spring 統合 springmvc の web....
序文: Mybatis の特殊文字処理、Mybatis の xml ファイル内の特殊文字の処理、ここ...
具体的なコードは次のとおりです。 /*スクロールバーの幅*/ ::-webkit-スクロールバー{ ...
目次序文1. Nginx+Tomcat 2. Nginxサーバーを構成する3. Tomcatアプリケ...