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 プロジェクトをパッケージ化して Apache サーバーにデプロイする手順

開発環境では、vue プロジェクトは、ローカルで Express サーバーを構築することをベースにし...

Vue ユニットテストに推奨されるプラグインと使用例

目次フレーム最高レベルのエラー報告活発なコミュニティとチーム冗談モカ推奨プラグインVue テストライ...

MySQL の 4 つのトランザクション分離レベルの詳細な説明

この実験のテスト環境: Windows 10+cmd+MySQL5.6.36+InnoDB 1. ト...

v-model 双方向バインディングデータを実装する vue カスタム コンポーネントのサンプル コード

プロジェクトでは、プロジェクトが呼び出すカスタム パブリック コンポーネントに遭遇します。通常、pr...

デスクトップ仮想化を実現するために Hyper-V を展開する手順 (グラフィック チュートリアル)

Hyper-V を展開するためのハードウェア要件は次のとおりです。 64 ビット プロセッサ、具体...

MySQL構成SSL証明書ログインの実装

目次序文1. MySQLはSSL構成を有効にする1.1 SSLが有効になっているかどうかを確認する1...

MySQL マルチテーブルクエリの具体例

1. SELECT句を使用して複数のテーブルをクエリするSELECT フィールド名 FROM tab...

Linux環境にDocker環境をインストールする(落とし穴なし)

目次インストールの前提条件ステップ1: システムの残りを確認してクリアし、Dockerの依存関係をイ...

shtml includeの使い方

これを応用することで、ウェブサイトの一部の公開領域を独立したページにすることができ、その後、この技術...

Linux の権限管理コマンド (chmod/chown/chgrp/unmask) の詳細な説明

目次chmod例権限に関する特別な注意分析するチョーンchgrp umask Linux オペレーテ...

Vue カプセル化コンポーネント ツール $attrs、$listeners の使用

目次序文$属性例: $listeners (公式説明)使用シナリオ要約する序文複数レベルのコンポーネ...

JavaScript タイマーの種類の概要

目次1.setInterval() 2.タイムアウトを設定する() 1.setInterval()指...

コード標準では、SQL ステートメントに結合が多すぎないようにする必要があるのはなぜですか?

無料ポイントインタビュアー:Linuxを使ったことはありますか?私:はいインタビュアー:メモリ使用量...

MySQL 空間データストレージと関数

目次1. データ型1. MySQL空間データとは何か2. GeoJSONとは3. 空間データ型のフォ...

Linuxにソフトウェアをインストールするいくつかの方法の詳細な説明

1. RPM パッケージのインストール手順: 1. soft.version.rpm などの対応する...