Skip to content

Commit a970fa9

Browse files
committed
2025/04/28 時点の英語版に同期
1 parent eab9961 commit a970fa9

File tree

1 file changed

+12
-66
lines changed
  • files/ja/web/api/eventtarget/addeventlistener

1 file changed

+12
-66
lines changed

files/ja/web/api/eventtarget/addeventlistener/index.md

Lines changed: 12 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@ title: "EventTarget: addEventListener() メソッド"
33
short-title: addEventListener()
44
slug: Web/API/EventTarget/addEventListener
55
l10n:
6-
sourceCommit: ded971d7fec855c2b81fde8809172697f2e227c1
6+
sourceCommit: be1922d62a0d31e4e3441db0e943aed8df736481
77
---
88

99
{{APIRef("DOM")}}{{AvailableInWorkers}}
@@ -55,12 +55,12 @@ addEventListener(type, listener, useCapture)
5555
- : 論理値で、 `listener` の呼び出しを一回のみのとしたいかどうかを値で指定します。 `true` を指定すると、 `listener` は一度実行された時に自動的に削除されます。指定されていない場合は、既定で `false` になります。
5656
- `passive` {{optional_inline}}
5757

58-
- : 論理値で、`true` ならば、 `listener` で指定された関数が {{domxref("Event.preventDefault", "preventDefault()")}} を呼び出さないことを示します。呼び出されたリスナーが `preventDefault()` を呼び出すと、ユーザーエージェントは何もせず、コンソールに警告を出力します
58+
- : 論理値で、`true` ならば、 `listener` で指定された関数が {{domxref("Event.preventDefault", "preventDefault()")}} を呼び出さないことを示します。呼び出されたリスナーが `preventDefault()` を呼び出すと、ユーザーエージェントは何もせず、コンソールに警告を出力される可能性があります
5959

6060
このオプションが指定されていない場合、既定で `false` になります。ただし、Safari 以外のブラウザーでは、{{domxref("Element/wheel_event", "wheel")}}、{{domxref("Element/mousewheel_event", "mousewheel")}}、{{domxref("Element/touchstart_event", "touchstart")}}、{{domxref("Element/touchmove_event", "touchmove")}} の各イベントでは `true` になります。詳細は[パッシブリスナーの使用](#パッシブリスナーの使用)をご覧ください。
6161

6262
- `signal` {{optional_inline}}
63-
- : {{domxref("AbortSignal")}} です。指定された `AbortSignal` オブジェクトの {{domxref("AbortController/abort()", "abort()")}} メソッドが呼び出された時に、リスナーが削除されます。指定されていない場合は`AbortSignal` がリスナーに関連付けられません。
63+
- : {{domxref("AbortSignal")}} です。その `AbortSignal` を持つ {{domxref("AbortController")}} オブジェクトの {{domxref("AbortController/abort()", "abort()")}} メソッドが呼び出された時に、リスナーが削除されます。指定されてなかった場合は`AbortSignal` がリスナーに関連付けられません。
6464

6565
- `useCapture` {{optional_inline}}
6666

@@ -69,7 +69,7 @@ addEventListener(type, listener, useCapture)
6969

7070
> [!NOTE]
7171
> イベントターゲットに登録されたイベントリスナーは、キャプチャフェーズやバブリングフェーズではなく、ターゲットフェーズのイベントになります。
72-
> キャプチャフェーズのイベントリスナーは、キャプチャフェーズ以外のイベントリスナーよりも先に呼び出されます
72+
> キャプチャフェーズのイベントリスナーは、ターゲットフェーズおよびバブリングフェーズのイベントリスナーの前に呼び出されます
7373
7474
- `wantsUntrusted` {{optional_inline}} {{non-standard_inline}}
7575
- : Firefox (Gecko) 独自の引数です。`true` の場合、このリスナーはウェブコンテンツによって発行された合成イベント (カスタムイベント) を受け取ります (ブラウザーの{{glossary("chrome", "クローム")}}では既定で `false` ですが、一般のウェブページでは `true` です)。この引数は、主にアドオンやブラウザー自身の役に立つものです。
@@ -98,52 +98,6 @@ function handleEvent(event) {
9898
}
9999
```
100100

101-
### オプションの対応の安全な検出
102-
103-
DOM 仕様書の古い版では、 `addEventListener()` の第 3 引数はキャプチャーを使用するかどうかを示す論理値でした。時間の経過とともに、より多くのオプションが必要であることが明らかになりました。関数にさらに多くの引数を追加する (オプションの値を扱うときに非常に複雑になります) のではなく、第 3 引数は、イベントリスナーを削除する過程を設定するためのオプションの値を定義するさまざまなプロパティを含むことができるオブジェクトに変更されました。
104-
105-
古いブラウザーは (あまり古くないブラウザーも含めて) 第 3 引数がまだ論理値であると仮定しているので、このシナリオをインテリジェントに処理できるようにコードを構築する必要があります。これを行うには、興味のあるオプションごとに機能検出を使用します。
106-
107-
例えば、 `passive` オプションをチェックしたい場合は次のようにします。
108-
109-
```js
110-
let passiveSupported = false;
111-
112-
try {
113-
const options = {
114-
get passive() {
115-
// この関数はブラウザーが passive プロパティに
116-
// アクセスしようとしたときに呼び出されます。
117-
passiveSupported = true;
118-
return false;
119-
},
120-
};
121-
122-
window.addEventListener("test", null, options);
123-
window.removeEventListener("test", null, options);
124-
} catch (err) {
125-
passiveSupported = false;
126-
}
127-
```
128-
129-
これは、 `options` オブジェクトを生成し、 `passive` プロパティのゲッター関数を持たせます。ゲッターは、呼ばれた場合に `passiveSupported` フラグを `true` に設定します。つまり、ブラウザーが `passive` プロパティの値を `options` オブジェクトでチェックした場合、 `passiveSupported``true` に設定され、そうでなければ `false` のままになります。次に `addEventListener()` を呼び出して、これらのオプションを指定して偽のイベントハンドラーをセットアップし、ブラウザーが第 3 引数としてオブジェクトを認識した場合にオプションがチェックされるようにします。その後、[`removeEventListener()`](/ja/docs/Web/API/EventTarget/removeEventListener) を呼び出して、自分たちで後始末をします。(呼ばれていないイベントリスナーでは `handleEvent()` は無視されることに注意してください。)
130-
131-
この方法で、任意のオプションに対応しているかどうかを確認することができます。上に示したようなコードを使って、そのオプションのゲッターを追加するだけです。
132-
133-
そして、問題のオプションを使用する実際のイベントリスナーを作成したい場合は、次のようにします。
134-
135-
```js
136-
someElement.addEventListener(
137-
"mouseup",
138-
handleMouseUp,
139-
passiveSupported ? { passive: true } : false,
140-
);
141-
```
142-
143-
ここでは、 {{domxref("Element/mouseup_event", "mouseup")}} イベントのリスナーを `someElement` 要素に追加しています。第 3 引数の `passiveSupported``true` である場合、 `options` オブジェクトを `passive``true` に設定して指定しています。そうでない場合は、論理値を渡す必要があることがわかっているので、 `useCapture` 引数の値として `false` を渡しています。
144-
145-
[機能検出の実装](/ja/docs/Learn_web_development/Extensions/Testing/Feature_detection)のドキュメントや [Web Incubator Community Group](https://wicg.github.io/admin/charter.html)[`EventListenerOptions`](https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection) に関する説明で詳しく学ぶことができます。
146-
147101
### ハンドラー内での "this" の値
148102

149103
イベントハンドラーが発行された要素を参照することはよくあることで、似たような要素の設定に汎用ハンドラーを使用する場合などに便利です。
@@ -302,8 +256,8 @@ console.log(someString); // 期待される値: 'Data' ('Data Again' とはな
302256
const elts = document.getElementsByTagName("*");
303257

304258
// ケース 1
305-
for (const elt of elts) {
306-
elt.addEventListener(
259+
for (const elem of elems) {
260+
elem.addEventListener(
307261
"click",
308262
(e) => {
309263
// 何かを行う
@@ -317,8 +271,8 @@ function processEvent(e) {
317271
// 何かを行う
318272
}
319273

320-
for (const elt of elts) {
321-
elt.addEventListener("click", processEvent, false);
274+
for (const elem of elems) {
275+
elem.addEventListener("click", processEvent, false);
322276
}
323277
```
324278

@@ -330,7 +284,7 @@ for (const elt of elts) {
330284

331285
イベントに既定のアクションがある場合、例えば、既定でコンテナーをスクロールする {{domxref("Element/wheel_event", "wheel")}} イベントの場合、イベントリスナーが {{domxref("Event.preventDefault()")}} を呼び出して既定のアクションをキャンセルするかどうかを事前に知ることができないため、ブラウザーは一般的にイベントリスナーが完了するまで既定のアクションを開始することができません。イベントリスナーの実行に時間がかかりすぎると、既定のアクションが実行されるまでに、{{glossary("jank", "ジャンク")}}と呼ばれる顕著な遅延が発生する可能性があります。
332286

333-
`passive` オプションを `true` に設定することで、イベントリスナーは既定のアクションを取り消される可能性がないことを宣言します。リスナーが {{domxref("Event.preventDefault()")}} を呼び出しても、効果はありません。
287+
`passive` オプションを `true` に設定すると、イベントリスナーは既定のアクションを取り消さないことを宣言するため、ブラウザーはリスナーが完了するのを待たずに、既定のアクションをすぐに開始できます。リスナーが {{domxref("Event.preventDefault()")}} を呼び出しても、効果はありません。
334288

335289
`addEventListener()` の仕様書では、`passive` オプションの既定値は常に `false` であると定義しています。しかし、パッシブリスナーのスクロールパフォーマンスの利点を古いコードで実現するために、最近のブラウザーでは {{domxref("Element/wheel_event", "wheel")}}、{{domxref("Element/mousewheel_event", "mousewheel")}}、{{domxref("Element/touchstart_event", "touchstart")}}、{{domxref("Element/touchmove_event", "touchmove")}} の各イベントの `passive` オプションの既定値が、文書レベルノード {{domxref("Window")}}、{{domxref("Document")}}、{{domxref("Document.body")}} においては `true` に変更されています。これにより、イベントリスナーが[イベントが取り消される可能性](/ja/docs/Web/API/Event/preventDefault)を防ぐことができるので、ユーザーがスクロールしている間にページのレンダリングをブロックすることはありません。
336290

@@ -341,10 +295,6 @@ for (const elt of elts) {
341295

342296
パッシブリスナーの効果を示す例については[パッシブリスナーによるスクロールの性能改善](#パッシブリスナーによるスクロールの性能改善)を参照してください。
343297

344-
### 古いブラウザーの場合
345-
346-
`addEventListener()` の引数 `options` に対応していない古いブラウザーでは、これを使用しようとすると、[機能検出](#オプションの対応の安全な検出)を適切に使用しない限り、引数 `useCapture` が使用できなくなります。
347-
348298
##
349299

350300
### シンプルなリスナーの追加
@@ -473,7 +423,7 @@ el.addEventListener(
473423

474424
### アロー関数を使用したイベントリスナー
475425

476-
この例はアロー関数記法を使用して実装された、簡単なイベントリスナーを紹介しています
426+
この例はアロー関数記法を使用して実装されたイベントリスナーを紹介しています
477427

478428
#### HTML
479429

@@ -656,8 +606,6 @@ function nonePassiveHandler(event) {
656606

657607
{{ EmbedLiveSample('options_の使い方の例', 600, 630) }}
658608

659-
`options` オブジェクトで特定の値を使用する前に、ユーザーのブラウザーがその値に対応していることを確認するのが良いでしょう。これらは歴史的にすべてのブラウザーがサポートしてきたわけではない追加要素であるからです。詳細は[オプションの対応の安全な検出](#オプションの対応の安全な検出)を参照してください。
660-
661609
### 複数のオプションを持つイベントリスナー
662610

663611
引数の `options` には複数のオプションを設定することができます。次の例では、2 つのオプションを設定しています。
@@ -667,11 +615,9 @@ function nonePassiveHandler(event) {
667615

668616
#### HTML
669617

670-
```html
618+
```html-nolint
671619
<button id="example-button">このボタンはクリックされていません。</button>
672-
<button id="reset-button">
673-
このボタンをクリックすると、最初のボタンがリセットされます。
674-
</button>
620+
<button id="reset-button">このボタンをクリックすると、最初のボタンがリセットされます。</button>
675621
```
676622

677623
#### JavaScript

0 commit comments

Comments
 (0)