[解決済み] document.addEventListenerとwindow.addEventListenerの違い?
質問
PhoneGap を使用しているとき、デフォルトの JavaScript コードで
document.addEventListener
しかし、私は独自のコードを持っており、そのコードでは
window.addEventListener
:
function onBodyLoad(){
document.addEventListener("deviceready", onDeviceReady, false);
document.addEventListener("touchmove", preventBehavior, false);
window.addEventListener('shake', shakeEventDidOccur, false);
}
何が違うのか、どちらを使うのが良いのか?
どのように解決するのですか?
その
document
と
window
は異なるオブジェクトであり、それぞれ異なるイベントを持っています。 使用方法
addEventListener()
は、異なるオブジェクトのイベントをリスンします。 興味のあるイベントを実際に持っている方を使うべきでしょう。
例えば
"resize"
イベントが発生します。
window
オブジェクトにない
document
オブジェクトを作成します。
例えば
"readystatechange"
イベントは
document
オブジェクトを作成します。
つまり、基本的には、どのオブジェクトが興味のあるイベントを受信するかを知り、そのイベントを受信するために
.addEventListener()
を、その特定のオブジェクトに適用します。
どのような種類のオブジェクトがどのような種類のイベントを発生させるかを示す興味深いチャートがあります。 https://developer.mozilla.org/en-US/docs/DOM/DOM_event_reference
伝搬イベント(クリックイベントなど)をリッスンする場合、そのイベントは document オブジェクトまたは window オブジェクトのいずれでもリッスンすることができます。 伝搬されるイベントの主な違いはタイミングだけです。 イベントは
document
オブジェクトの前に
window
オブジェクトの方が先に発生するからです。しかし、この違いは通常重要ではないので、どちらを選んでもかまいません。 一般的には、伝搬されるイベントの処理に必要な、イベントの発生源に最も近いオブジェクトを選ぶのが良いと思います。 つまり
document
オーバー
window
のどちらかを選択します。 しかし、私はしばしば、さらにソースに近づけて
document.body
あるいは、(可能であれば)ドキュメント内のもっと近い共通の親を使用することもできます。
関連
-
[解決済み】Javascript:getElementById対getElementsById(両方が別のページで動作する)。
-
[解決済み】event.stopPropagationとevent.preventDefaultの違いは何ですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] callとapplyの違いは何ですか?
-
[解決済み] Node.jsを使うタイミングをどう判断するか?
-
[解決済み] Bowerとnpmの違いは何ですか?
-
[解決済み] JavaScriptで日付の書式設定に関するドキュメントはどこにありますか?
-
[解決済み] モバイルブラウザの検出
-
[解決済み] setTimeout(fn, 0)が役に立つことがあるのはなぜですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】パッシブイベントリスナー内部でpreventDefaultができない
-
[解決済み】Uncaught ReferenceError: angular is not defined - AngularJSが動作しない。
-
[解決済み] Uncaught TypeError: 未定義のプロパティ 'top' を読み込めない
-
[解決済み】jquery $.ajaxオブジェクトのresponseJSONプロパティを取得する方法 [重複]。
-
[解決済み】「Uncaught TypeError: Chromeで "Illegal invocation "が発生する。
-
[解決済み】コンソールがUnterminated JSX contentsエラーを投げる【終了しました
-
[解決済み】SyntaxError: JSON の位置 1 に予期しないトークン o があります。
-
[解決済み】Jestが予期しないトークンに遭遇した
-
[解決済み】 Uncaught Reference Error: stLight is not defined (in Chrome only)
-
[解決済み】Uncaught TypeError: 未定義のプロパティ 'msie' を読み取れない - jQuery tools