jsのイベントオブジェクトを深く理解しましょう

jsのイベントオブジェクトを深く理解しましょう

JS でよく使用されるイベントは次の通りです。

  • ページイベント: load;
  • フォーカス イベント: フォーカス、ぼかし。
  • マウス イベント: クリック、マウスアウト、マウスオーバー、マウス移動など。
  • キーボード イベント: keydown、keyup、keypress;
  • フォーム イベント: リセット、送信;
  • コンテンツ変更イベント: 変更、入力

では、JS の「イベント オブジェクト」とは一体何でしょうか?

まず、イベントとは何でしょうか?

まず、JS はいくつかの動的な操作を実装するために使用され、ユーザーはフォームの送信、マウスのクリックなどの機能を実装したい場合があり、そのためにはブラウザーでこのイベントをトリガーする必要があります。次に、ブラウザーはユーザーの行動を認識 (またはキャプチャ) し、イベントに応答して処理します。これをイベントと呼びます。

では、イベント オブジェクトを生成する理由は何でしょうか?

ほとんどの場合、イベントのトリガーはユーザーが実行したいアクションです。つまり、ユーザーがいつイベントをトリガーするかはわかりません。さらに、イベントの伝播メカニズムにより、どのノードでイベントがトリガーされるかさえわかりません。これは頭の痛い問題です。

この問題を解決するために、イベントが発生した後、システムはそれを解決するために作成したイベント ハンドラー (コード) を呼び出します。

すると、イベント オブジェクトとは何かという疑問が生じます。

ハンドラを呼び出すと、システムはイベントに関するすべての情報をオブジェクトにカプセル化し、それをパラメータとしてリスニング関数 (イベント ハンドラ) に渡します。したがって、このオブジェクトはイベント オブジェクトと呼ばれます。

イベントの種類に応じて、イベント オブジェクトに含まれる情報も異なります。たとえば、クリック イベントの場合は、マウス クリックの水平座標と垂直座標が含まれ、キーボード イベントの場合は、キーボード キーの値などが含まれます。

<本文>
 <div id="div">
 <p>ppp</p>
 </div>
 <入力タイプ="テキスト" 値="" id="i">
</本文>
<スクリプト>
var d = document.getElementById('div');
//マウスイベント d.addEventListener('click',function(e){
 コンソールログ(e);
});
var i = document.getElementById('i');
//キーボードイベント i.addEventListener('keydown',k);
関数k(e){
 コンソールログ(e);
}
</スクリプト>

イベント オブジェクトの意味がわかったので、イベント オブジェクトのプロパティとメソッドを見てみましょう。

(1)一般的な属性:

event.bubbles: 現在のイベントがバブルするかどうかを示すブール値を返します。

event.eventPhase: 伝播フェーズにおけるイベントストリームの位置を示す整数値を返します。

0: イベントは現在発生していません。
1: イベントは現在キャプチャフェーズにあります。
2: イベントがターゲットノードに到達します。
3: イベントは盛り上がり段階にあります。

event.type: 大文字と小文字を区別してイベント タイプを示す文字列を返します。

event.timeStamp: イベントが発生した時刻を示すミリ秒のタイムスタンプを返します。

clientX、clientY: マウスイベントのX、Y座標を取得します。

イベントオブジェクト

(2)イベントプロキシ/デリゲートプロパティ:

event.target: イベント トリガーへの参照。トリガー イベントが発生したノードを返します。 (ポイント)

event.currentTarget: イベントが現在配置されているノード、つまり実行中のリスニング関数がバインドされているノードを返します。 (ただ理解するだけ)

 var d = document.getElementById('d');
 d.onclick = 関数(e){
 //イベントノードを返します console.log(e.currentTarget);
 //トリガーノードに戻る console.log(e.target);
 }

イベント プロキシ (イベント委任) の意味: イベントはバブリング段階で親ノードに上向きに伝播するため、子ノードのリスニング関数を親ノード上に定義することができ、親ノードのリスニング関数は複数の子要素のイベントを均一に処理します。このメソッドはイベント プロキシと呼ばれ、イベント プロキシまたはイベント委任とも呼ばれます。

<ヘッド>
 <タイトル></タイトル>
 <メタ文字セット="UTF-8">
 <スタイル>
 div{パディング: 40px}
 #div3{幅: 300px;高さ: 300px;境界線: 1px 赤一色;}
 #div2{幅: 200px;高さ: 200px;境界線: 1px 赤一色;}
 #div1{幅: 100px;高さ: 100px;境界線: 1px 赤一色}
 </スタイル>
</head>
<本文>
 <div id="div3">div3
 <div id="div2">div2
  <div id="div1">div1</div>
 </div>
 </div>
</本文>
<スクリプト>
 var d = document.getElementById('div3');
 d.onclick = 関数(e){
 e.target.style.background = '赤';
 }
</スクリプト>

上記のコードによると、3 つの div の位置はおおよそ次のようになります。各 div をクリックすると、div 全体が赤に変わります。主に、e.target はクリックによってトリガーされたノードを返します。

(3) ブラウザのデフォルト動作を防止し、イベントの伝播を防ぐ方法 event.preventDefault(): この方法は、ブラウザが現在のイベントのデフォルト動作を実行しないようにします。たとえば、リンクをクリックするとブラウザは指定されたページにジャンプします。または、スペースバーを押すとページが一定距離下にスクロールします。 event.stopPropagation(): このメソッドは、DOM 構造内でイベントが伝播し続けるのを停止し、他のノードで定義されたリスニング関数のトリガーを防ぎます。

<本文>
 <div id="div2">2
 <div id="div1">1
  <a id="a" href="Baidu 2">私の明るい月の匂いはますます嗅ぎたくなる</a>
 </div>
 </div>
</本文>
<スクリプト>
 var d2 = document.getElementById('div2');
 var d1 = document.getElementById('div1');
 var a = document.getElementById('a');
 d2.onclick = 関数(e){
 アラート('d2');
 }
 d1.onclick = 関数(e){
 アラート('d1');
 }
 a.onclick = 関数(e){
 //イベントの伝播を停止します e.stopPropagation();
 警告('a');
 //ブラウザのデフォルトの動作を防止する e.preventDefault();
 }
</スクリプト> 

イベント オブジェクトを使用して、簡単な例を実装します。マウスに追従する div (イベント オブジェクトの XY 値を変更することによって)

<本文>
 <div id="div2">2
 <div id="div1">1
  <a id="a" href="Baidu 2">私の明るい月の匂いはますます嗅ぎたくなる</a>
 </div>
 </div>
</本文>
<スクリプト>
 var d2 = document.getElementById('div2');
 var d1 = document.getElementById('div1');
 var a = document.getElementById('a');
 d2.onclick = 関数(e){
 アラート('d2');
 }
 d1.onclick = 関数(e){
 アラート('d1');
 }
 a.onclick = 関数(e){
 //イベントの伝播を停止します e.stopPropagation();
 警告('a');
 //ブラウザのデフォルトの動作を防止する e.preventDefault();
 }
</スクリプト> 

クリック前(動きなし)

クリック後(マウスに従う)

要約する

js のイベント オブジェクトに関するこの記事はこれで終わりです。より関連性の高い js イベント オブジェクトについては、123WORDPRESS.COM の以前の記事を検索するか、以下の関連記事を引き続き参照してください。今後とも 123WORDPRESS.COM をよろしくお願いいたします。

以下もご興味があるかもしれません:
  • js のイベント オブジェクトとイベント委任の概要
  • JavaScript イベントオブジェクトの詳細な説明
  • JavaScript イベントオブジェクトのイベント使用状況の分析
  • JavaScript イベント フロー、イベント ハンドラー、イベント オブジェクトの概要
  • Javascript イベントオブジェクトについての簡単な説明
  • jsオブジェクトとイベントの学習ノートを見てみましょう

<<:  Linux centos7 環境での MySQL インストール チュートリアル

>>:  Linux カーネルの探究: Kconfig の秘密

推薦する

Vue の大容量ファイルアップロードとブレークポイント再開アップロードの実装

目次ファイルアップロードのための2つのソリューションファイルストリーム(フォームデータ)に基づくクラ...

H5レイアウト実装手順における天井と底部の吸引を解決するための純粋なCSS

どのような製品について言及したいですか?最近、ユーザーがマーケティングの変化をよりよく観察できるよう...

Nginx+SSL による双方向認証を実装するためのサンプル コード

まずディレクトリを作成する cd /etc/nginx mkdir ssl cd ssl CA と自...

純粋な CSS3 で美しい入力ボックスアニメーションスタイルライブラリを実現 (テキスト入力愛)

純粋な CSS3 で実装された美しい入力ボックス アニメーション スタイル ライブラリを共有します ...

Firefox で Webdings フォントをサポートする方法

Firefox、Opera、その他のブラウザは Webdings フォントをサポートしていません。回...

画像内のrarファイルを隠す方法

このロゴを .rar ファイルとしてローカルに保存し、解凍して効果を確認することができます。よりシン...

VueにおけるAxios非同期通信の詳細な説明

1. まず、インタラクティブに使用するための .json ファイルを作成します。json データ形式...

Docker で Rancher をデプロイする方法 (落とし穴なし)

操作前に必ずお読みください:注意:管理に rancher を使用する場合は、k8s クラスターが構築...

require/import キーワードを使用して v-for ループでローカル画像をインポートするいくつかの方法

目次問題の説明方法 1 (バックエンドが画像 URL を返す)方法 2 (フロントエンドで requ...

HTML タグでの this の使用法の紹介

例えば:コードをコピーコードは次のとおりです。 <html> <ヘッド> &...

Vue.jsはカレンダー機能を実装します

この記事では、カレンダー機能を実装するためのVue.jsの具体的なコードを例として紹介します。具体的...

Webデザインチュートリアル(1):手順と全体レイアウト

<br />注:ウェブサイトの種類を示すものを除くすべてのテキストは、企業サイト用です。...

Python ベースの Linux システムにおける特定のプロセスのパフォーマンス監視の考え方の詳細な説明

インターネット上には Linux サーバーを監視するためのツール、コンポーネント、プログラムが多数あ...

テキストまたはJSONを返すようにnginxを設定する方法

特定のインターフェースをリクエストするときに、指定されたテキスト文字列または JSON 文字列を返す...

Vue で配列をクリアするいくつかの方法 (要約)

目次1. はじめに2. データを消去するいくつかの方法2.1 ref() の使用2.2 スライスの使...