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データベースを監視する方法
このチュートリアルでは、LinuxでのMySQL 5.6.33のインストールと設定方法を参考までに紹...
序文この記事は主にMySQLコマンド階層検索ヘルプの使用に関する内容を紹介します。この記事のサンプル...
まとめ:以下のように、CSS で指定した行にマウスを置いたときに行全体の色を変更する方法を示します。...
最近、製品部門のユーザーエクスペリエンスチームの学生は、アライアンス環境における広告に関する一連の研...
序文パスワードを忘れることは、よく遭遇する問題です。MySQL または MariaDB データベース...
序文WEB 開発では、クロスドメイン リクエストが頻繁に発生します。クロスドメインの問題を解決する方...
説明する: Windows 10 に VM をインストールし、VM で Docker を実行し、Do...
問題の説明Ele.me UI のフレームワークでは、入力データは el-form であり、出力データ...
目次概要1. グローバル登録2. 現地登録3. モジュールシステムへのローカル登録概要コンポーネント...
目次1. はじめに: 2. ドッカー: 1 カスタムネットワーク2 展開を開始する3 ネットワークを...
まず、provide/inject を使用する理由について説明しましょう。祖父コンポーネントと孫コン...
序文最近、仮想マシンを使用して Ubuntu 18.04 をインストールしました。クローン作成後、I...
ご存知のとおり、cd コマンドがないと、Linux でディレクトリを切り替えることはできません。それ...
Navicat クライアントを通じてデフォルトの日時値を変更する際に問題が発生しました。データベース...
目次序文基礎を築くプロトタイプコンストラクタのプロパティ__プロト__プロトタイプチェーン改善する要...