目次
JavaScript イベントの解釈
1. イベントの基本概念
2. イベント操作: 監視と監視の削除
2.1 イベントの監視
2.1.1 HTML インライン属性
2.1.2 DOM 属性バインディング
2.1.3 イベント リスニング関数
2.2 イベント リスニングを削除します
3. イベント トリガー プロセス
3.1 キャプチャフェーズ
3.2 ターゲット フェーズ
3.3 冒泡阶段
4、事件委托
5、阻止事件冒泡
6、event 对象
target、 srcElement、 currentTarget 和 relatedTarget、fromElement、 toElement
clientX/Y、screenX/Y、pageX/Y、offsetX/Y
type: 現在の Event オブジェクトによって表されるイベントの名前を返します
preventDefault(): イベントに関連付けられたデフォルトのアクションを実行しないようにブラウザに通知します;

JavaScriptイベントとは何ですか?

Jan 19, 2022 pm 03:39 PM
event javascript イベント

JavaScript イベントは、Web ページを開くなど、ドキュメントまたはブラウザーで発生する特定のインタラクティブな瞬間を指します。load イベントは、ブラウザーが読み込まれた後にトリガーされ、マウスが読み込まれたときにトリガーされます。要素上にホバーすると、マウスが要素をクリックしたときに Hover イベント、click イベントがトリガーされます。

JavaScriptイベントとは何ですか?

この記事の動作環境: Windows7 システム、JavaScript バージョン 1.8.5、DELL G3 コンピューター

JavaScript イベントとは参照する?

JavaScript イベントの詳細説明

JavaScript イベントの解釈

1. イベントの基本概念

イベント は、特定の Web ページを開くなど、ドキュメントまたはブラウザーで発生する特定の対話の瞬間を指します。ブラウザーが読み込まれた後に load イベントがトリガーされ、hover がトリガーされます。マウスが要素の上に移動すると イベント、マウスが要素をクリックすると click イベントがトリガーされます。

イベント処理は、イベントがトリガーされたときのイベントに応答するブラウザの動作であり、この動作に対応するコードは イベント ハンドラです。

2. イベント操作: 監視と監視の削除

2.1 イベントの監視

ブラウザは、いくつかのイベントに基づいて、対応するイベント処理を実行します。イベントをリッスンするには、主に 3 つの方法があります。

2.1.1 HTML インライン属性

# は、HTML 要素にイベント関連の属性を直接入力することを意味し、属性値はイベント処理です。プログラム。例は次のとおりです。

<button></button>
ログイン後にコピー

onclickclick イベントに対応するため、ボタンがクリックされると、イベント ハンドラーが実行されます。コンソール出力 あなたをクリックしました!

ただし、この方法は HTML コードと JavaScript コードを結合するため、コードのメンテナンスに役立たないため、この方法はできるだけ避ける必要があることに注意する必要があります。

2.1.2 DOM 属性バインディング

DOM ノードのプロパティを直接設定してイベントとイベント ハンドラーを指定します。上記のコード:

const btn = document.getElementById("btn");
btn.onclick = function(e) {
    console.log("You clicked me!");
};
ログイン後にコピー

上記の例では、まず、 btn オブジェクトを取得し、このオブジェクトに onclick 属性を追加して click イベントをリッスンします。この属性値はイベント ハンドラーに対応します。このプログラムは、DOM レベル 0 イベント ハンドラーとも呼ばれます。

2.1.3 イベント リスニング関数

標準のイベント リスニング関数は次のとおりです。

const btn = document.getElementById("btn");
btn.addEventListener("click", () => {
    console.log("You clicked me!");
}, false);
ログイン後にコピー

上記の例は、まずノードを表す btn オブジェクトを取得し、次に追加することを意味します。このオブジェクトにイベント リスナーが作成され、click イベントが発生するとコールバック関数が呼び出され、コンソールに You clicked me! が出力されます。 addEventListener この関数には 3 つのパラメーター false が含まれています。3 番目のパラメーターの意味は、イベント トリガーの 3 つの段階の後で説明します。このプログラムは、DOM レベル 2 イベント ハンドラーとも呼ばれます。 IE9、FireFox、Safari、Chrome、Opera はすべて DOM レベル 2 イベント ハンドラーをサポートしています。IE8 以前の場合は、attacEvent() 関数を使用してイベントをバインドします。

これにより、互換性のあるコードを書くことができます:

function addEventHandler(obj, eventName, handler) {
    if (document.addEventListener) {
        obj.addEventListener(eventName, handler, false);
    }
    else if (document.attachEvent) {
        obj.attachEvent("on" + eventName, handler);
    }    
    else {
        obj["on" + eventName] = handler;
    }
}
ログイン後にコピー

2.2 イベント リスニングを削除します

イベントを要素にバインドした後、Binding にアクセスしたい場合は、 removeEventListener メソッドを使用する必要があります。次の例を見てください:

const handler = function() {
    // handler logic
}
const btn = document.getElementById("btn");

btn.addEventListener("click", handler);
btn.removeEventListener("click", handler);
ログイン後にコピー

バインドされたイベントのコールバック関数は匿名関数にすることはできませんが、宣言された関数でなければならないことに注意してください。これは、このコールバック関数の参照は、次の場合に渡す必要があるためです。イベントのバインドを解除します。

同様に、IE8 以下のバージョンは上記のメソッドをサポートしていませんが、代わりに detachEvent を使用します。

const handler = function() {
    // handler logic
}
const btn = document.getElementById("btn");

btn.attachEvent("onclick", handler);
btn.detachEvent("onclick", handler);
ログイン後にコピー

同様に、互換性のある削除イベント関数を作成できます:

function removeEventHandler(obj, eventName, handler) {
    if (document.removeEventListener) {
        obj.removeEventListener(eventName, handler, false);
    }
    else if (document.detachEvent) {
        obj,detachEvent("on" + eventName, handler);
    }
    else {
        obj["on" + eventName] = null;
    }
}
ログイン後にコピー

3. イベント トリガー プロセス

イベント ストリームは、ページがイベントを受信する順序を記述します。最新のブラウザ (IE6 ~ IE8 以外のブラウザ (IE9、FireFox、Safari、Chrome、Opera などを含む) のイベント フロー) には、キャプチャ フェーズ、ターゲット フェーズ、バブリング フェーズという 3 つのプロセスが含まれます。は、このプロセスを示しています。

JavaScriptイベントとは何ですか?

次に、これら 3 つのプロセスについて詳しく説明します。

3.1 キャプチャフェーズ

マウスのクリックやホバーなど、DOM 要素を操作すると、イベントが DOM 要素に送信されます。このイベントは Window から始まり、 docuemnt、html、bodyの順に子ノードを通過し、目的の要素に到達するまでWindowから目的の要素の親ノードに到達するプロセスをCaptureフェーズと呼びます。この時点ではまだターゲット ノードに到達していないことに注意してください。

3.2 ターゲット フェーズ

キャプチャ フェーズの終わりに、イベントはターゲット ノードの親ノードに到達し、最終的にターゲット ノードに到達し、ターゲット ノードでイベントをトリガーします。これが 目標段階 です。

イベントによってトリガーされるターゲット ノードは最下位のノードであることに注意してください。たとえば、次の例:

<div>
    <p>你猜,目标在这里还是<span>那里</span>。</p>
</div>
ログイン後にコピー

当我们点击“那里”的时候,目标节点是<span></span>,点击“这里”的时候,目标节点是<p></p>,而当我们点击<p></p>区域之外,<p></p>区域之内时,目标节点就是<p></p>

3.3 冒泡阶段

当事件到达目标节点之后,就会沿着原路返回,这个过程有点类似水泡从水底浮出水面的过程,所以称这个过程为冒泡阶段

针对这个过程,wilsonpage 做了一个 DEMO,可以非常直观地查看这个过程。

现在再看 addEventListener(eventName, handler, useCapture) 函数。第三个参数是 useCapture,代表是否在捕获阶段进行事件处理, 如果是 false, 则在冒泡阶段进行事件处理,如果是 true,在捕获阶段进行事件处理,默认是 false。这么设计的主要原因是当年微软和 netscape 之间的浏览器战争打得火热,netscape 主张捕获方式,微软主张冒泡方式,W3C 采用了折中的方式,即先捕获再冒泡。

4、事件委托

上面我们讲了事件的冒泡机制,我们可以利用这一特性来提高页面性能,事件委托便事件冒泡是最典型的应用之一。

何谓“委托”?在现实中,当我们不想做某件事时,便“委托”给他人,让他人代为完成。JavaScript 中,事件的委托表示给元素的父级或者祖级,甚至页面,由他们来绑定事件,然后利用事件冒泡的基本原理,通过事件目标对象进行检测,然后执行相关操作。看下面例子:

// HTML
<ul id="list">
    <li>Item 1</li>
    <li>Item 2</li>
    <li>Item 3</li>
    <li>Item 4</li>
    <li>Item 5</li>
</ul>

// JavaScript
var list = document.getElementById("list");
list.addEventListener("click", function(e) {
    console.log(e.target);
});
ログイン後にコピー

上面的例子中,5 个列表项的点击事件均委托给了父元素 <ul id="list"></ul>

先看看事件委托的可行性。有人会问,当事件不是加在某个元素上的,如何在这个元素上触发事件呢?我们就是利用事件冒泡的机制,事件流到达目标元素后会向上冒泡,此时父元素接收到事件流便会执行事件执行程序。有人又会问,被委托的父元素下面如果有很多子元素,怎么知道事件流来自于哪个子元素呢?这个我们可以从事件对象中的 target 属性获得。事件对象下面会详细讲解。

我们再来看看为什么需要事件委托。

  • 减少事件绑定。上面的例子中,也可以分别给每个列表项绑定事件,但利用事件委托的方式不仅省去了一一绑定的麻烦,也提升了网页的性能,因为每绑定一个事件便会增加内存使用。

  • 可以动态监听绑定。上面的例子中,我们对 5 个列表项进行了事件监听,当删除一个列表项时不需要单独删除这个列表项所绑定的事件,而增加一个列表项时也不需要单独为新增项绑定事件。

看了上面的例子和解释,我们可以看出事件委托的核心就是监听一个 DOM 中更高层、更不具体的元素,等到事件冒泡到这个不具体元素时,通过 event 对象的 target 属性来获取触发事件的具体元素。

5、阻止事件冒泡

事件委托是事件冒泡的一个应用,但有时候我们并不希望事件冒泡。比如下面的例子:

const ele = document.getElementById("ele");
ele.addEventListener("click", function() {
    console.log("ele-click");
}, false);

document.addEventListener("click", function() {
    console.log("document-click");
}, false);
ログイン後にコピー

我们本意是当点击 ele 元素区域时显示 "ele-click",点击其他区域时显示 "document-click"。但是我们发现点击 ele 元素区域时会依次显示 "ele-click" "document-click"。那是因为绑定在 ele 上的事件冒泡到了 document 上。想要解决这个问题,只需要加一行代码:

const ele = document.getElementById("ele");
ele.addEventListener("click", function(e) {
    console.log("ele-click");
    e.stopPropagation(); // 阻止事件冒泡
}, false);

document.addEventListener("click", function(e) {
    console.log("document-click");
}, false);
ログイン後にコピー

我们还能用 e.cancelBubble = true 来替代 e.stopPropagation()。网上的说法是 cancelBubble 仅仅适用于 IE,而 stopPropagation 适用于其他浏览器。但根据我实验的结果,现代浏览器(IE9 及 以上、Chrome、FF 等)均同时支持这两种写法。为了保险起见,我们可以采用以下代码:

function preventBubble(e) {
    if (!e) {
        const e = window.event;
    }
    e.cancelBubble = true;
    if (e.stopPropagation) {
        e.stopPropagation();
    }
}
ログイン後にコピー

6、event 对象

Event 对象代表事件的状态,比如事件在其中发生的元素、键盘按键的状态、鼠标的位置、鼠标按钮的状态。当一个事件被触发的时候,就会创建一个事件对象。

我们用下面的代码打印出事件对象:

<div id="list">
    <li>Item 1</li>
    <li>Item 2</li>
</div>
<script>
    var list = document.getElementById("list");
    list.addEventListener("click", function(e) {
        console.log(e);
    });
</script>
ログイン後にコピー

chrome 49 的运行结果如下:

JavaScriptイベントとは何ですか?

下面介绍一些比较常用的属性和方法。

target、 srcElement、 currentTarget 和 relatedTarget、fromElement、 toElement

  • target 与 srcElement 完全相同;

  • target はイベントをトリガーした要素を指し、currentTarget はイベントがバインドされている要素を指します。

  • AssociatedTarget: に関連するノードイベントのターゲットノード。マウスオーバー イベントの場合、このプロパティは、ターゲット ノード上を移動するときにマウス ポインタが離れたノードです。 Mouseout イベントの場合、このプロパティは、マウス ポインタがターゲットから離れるときに入るノードです。
    このプロパティは、他のタイプのイベントには役に立ちません。

  • fromElement と toElement は、mouseover イベントと Mouseout イベントでのみ有効です。

上記の例を使用すると、<li>Item 1</li> をクリックすると、ターゲットは <li>Item 1</li> 要素、currentTarget は <p id="list"></p> です。

clientX/Y、screenX/Y、pageX/Y、offsetX/Y

上の図:

  • ##offsetX/Y: クリック位置は要素の左上隅を基準とします; <p></p>
  • clientX/Y: クリック位置は左上隅を基準としますブラウザのコンテンツ領域の隅 位置; <p></p>
  • screenX/Y: クリック位置は画面の左上隅を基準とします; <p></p>
  • #pageX/Y: クリック位置はページ全体を基準とします。左上隅の位置は、<p></p>
  • pageX/Y と clientX/Y は通常同じであり、次のようになります。スクロールバーが表示される場合のみ異なります。 <p></p>
  • #altKey、ctrlKey、shiftKey

    altKey: イベントがトリガーされたときに「ALT」が押されたかどうかを返します。
  • <p></p>#ctrlKey: イベントがトリガーされたときに「CTRL」キーが押されたかどうかを返します;
  • <p></p>shiftKey: イベントがトリガーされたときに「SHIFT」が押されたかどうかを返します。キーが押された;
  • #その他の属性

type: 現在の Event オブジェクトによって表されるイベントの名前を返します

  • bubbles: イベントがバブル イベント タイプであるかどうかを示すブール値を返します;

  • cancelable: イベントがバブル イベント タイプを持つことができるかどうかを示すブール値を返します。キャンセル可能なデフォルト アクション;

  • eventPhase: イベント伝播の現在の段階を返します。値は 3 つあります: Event.CAPTURING_PHASE、Event.AT_TARGET、Event.BUBBLING_PHASE。対応する値は 1 です。 、2、および 3 は、それぞれキャプチャ ステージを表します。 、通常のイベントのディスパッチおよびバブリング フェーズ;

  • パス: バブリング フェーズ中に通過したノード;

  • method

preventDefault(): イベントに関連付けられたデフォルトのアクションを実行しないようにブラウザに通知します;

  • stopPropagation( ): バブリングを防ぐ;

  • 推奨学習: "

  • JS Basic Tutorial

"

以上がJavaScriptイベントとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

jQueryで選択要素の変更イベントバインディングを実装する方法 jQueryで選択要素の変更イベントバインディングを実装する方法 Feb 23, 2024 pm 01:12 PM

jQuery は、DOM 操作、イベント処理、アニメーション効果などを簡素化するために使用できる人気のある JavaScript ライブラリです。 Web 開発では、選択した要素のイベント バインディングを変更する必要がある状況によく遭遇します。この記事では、jQuery を使用して選択要素変更イベントをバインドする方法を紹介し、具体的なコード例を示します。まず、ラベルを使用してオプションを含むドロップダウン メニューを作成する必要があります。

JavaScript で HTTP ステータス コードを簡単に取得する方法 JavaScript で HTTP ステータス コードを簡単に取得する方法 Jan 05, 2024 pm 01:37 PM

JavaScript で HTTP ステータス コードを取得する方法の紹介: フロントエンド開発では、バックエンド インターフェイスとの対話を処理する必要があることが多く、HTTP ステータス コードはその非常に重要な部分です。 HTTP ステータス コードを理解して取得すると、インターフェイスから返されたデータをより適切に処理できるようになります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法と、具体的なコード例を紹介します。 1. HTTP ステータス コードとは何ですか? HTTP ステータス コードとは、ブラウザがサーバーへのリクエストを開始したときに、サービスが

PHP を使用してイベントベースのアプリケーションを構築する方法 PHP を使用してイベントベースのアプリケーションを構築する方法 May 04, 2024 pm 02:24 PM

PHP でイベントベースのアプリケーションを構築する方法には、EventSourceAPI を使用してイベント ソースを作成する方法と、EventSource オブジェクトを使用してクライアント側でイベントをリッスンする方法が含まれます。 Server Sent Events (SSE) を使用してイベントを送信し、XMLHttpRequest オブジェクトを使用してクライアント側でイベントをリッスンします。実際の例は、EventSource を使用して、電子商取引 Web サイトの在庫数をリアルタイムで更新することです。これは、サーバー側で在庫をランダムに変更して更新を送信することで実現され、クライアントは EventSource を通じて在庫の更新をリッスンし、それらを表示します。リアルタイム。

See all articles