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データベースを監視する方法
目次最初のステップ: 2 番目のステップは、request.js で関連する構成を行うことです。re...
fdisk と比較すると、parted はあまり使用されず、主に 2T を超えるパーティションに使用...
1. サブクエリMySQL 4.1以降はサブクエリをサポートしていますサブクエリ:別のクエリ内にネス...
静的ファイルNginx は高いパフォーマンスで知られており、フロントエンドのリバース プロキシ サー...
事前に言っておく気まぐれですが、MySQL の order by sorting にどのようなルール...
1. データベースを作成します。 データ data _name を作成します。 PHP でデータベー...
1 はじめにKong は単純な製品ではありません。この記事で言及されている Kong は主に Kon...
この記事では、Linux のユーザーとグループの管理によく使用されるコマンドをまとめます。ご参考まで...
目次【共通コマンド】 [一般的な esxi コマンドの概要] [esxcli コマンドの調査] ES...
目次1. プロトタイプ2. プロトタイプチェーン2.1 コンストラクタ2.2 電話をかける/申し込む...
MySQLのインストール、設定、最適化は参考用です。具体的な内容は次のとおりです。 MySQL ダウ...
目次レスト演算子とは何ですか? JavaScript 関数では REST 演算子はどのように機能しま...
1. SpringBoootプロジェクトを作成し、jarパッケージにパッケージ化する2. Linux...
以下の属性はブラウザとの互換性があまりありません。 1.transform:rotate(45度) ...
ネットで変更方法をいろいろ調べたのですが、うまくいきませんでした。後で大物から見て削除しました。フォ...