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データベースを監視する方法
1. デザインの方向性を明確にする<br />まず、どのユーザーを対象にデザインするのか...
Seurat は、単一細胞解析用の重量級の R パッケージです。使用したことがある人なら誰でも、その...
目次事前準備実施方法: 1. 単一のデータを挿入する2. マージデータ挿入3. MySqlBulkL...
目次1. インデックスの基本1.1 はじめに1.2 インデックスの仕組み1.3 インデックスの種類1...
序文最近、私はクライアントのサーバー構成を支援しており、Nginx 構成ファイルを頻繁に変更していま...
シェルスクリプトを使用したMySQLデータベースの自動バックアップデータベースを頻繁にバックアップす...
この記事では、Docker を使用して Centos6 に Zookeeper をデプロイする方法に...
目次1. DateTimePickerの日付選択範囲は現在時刻とそれ以前です2. DateTimeP...
目次序文1. レスポンシブシステムの重要な要素1. データの変更を監視する方法2. 依存関係を収集す...
今日、問題が発生しました。クエリ バーのドロップダウン ボックスの内容が長すぎて、一部が隠れてしまっ...
最初にコード、次にテキストコードをコピーコードは次のとおりです。 <!DOCTYPE html...
この記事ではMySQL 5.7.20のインストールと設定方法を記録し、皆さんと共有します1. MyS...
一時テーブルとメモリテーブルメモリ テーブルとは、メモリ エンジンを使用するテーブルを指します。テー...
序文CSS グリッドは通常、さまざまなフレームワークにバンドルされていますが、実際のビジネス ニーズ...
各データベース内の各テーブルのサイズをカウントすることは、データ ガバナンスの最も単純な要件の 1 ...