ホームページ ウェブフロントエンド jsチュートリアル JavaScript イベント学習 第 7 章 イベントのプロパティ_JavaScript スキル

JavaScript イベント学習 第 7 章 イベントのプロパティ_JavaScript スキル

May 16, 2016 pm 06:35 PM
event

イベントに関する情報を読みたいとき、多くの場合、多数の属性に埋もれてしまいますが、そのほとんどはほとんどのブラウザーでは適切に動作しません。イベント互換性リストは次のとおりです。
これらの属性のリストは作成しません。これらの状況は非常に混乱しており、学習にはまったく役立ちません。 5 つのコードを書く前に、ブラウザに関して 5 つの質問をしたいと思います。
1. イベントの種類は何ですか?
2. イベントの対象となる HTML 要素はどれですか?
3. イベントが発生したときにどのキーが押されましたか?
4. イベントが発生したときにどのマウス ボタンが押されましたか?
5. イベントが発生したときのマウスの位置はどこですか?
最後の質問については、ここで非常に詳細に回答しました。
これらのコードでは非常に厳密なオブジェクト チェックを行っていることに注意してください。まずイベントへのクロスブラウザー アクセスを作成し、各属性を使用する前にブラウザーのサポートを確認しました。

1. イベントの種類は何ですか?
これは標準的な回答を持つクロスブラウザーの質問です: type 属性を使用してそのプロパティを表示します:

コードをコピー コードは次のとおりです。

function doSomething(e) {
if (!e) var e = window.event;
alert(e.type); 🎜> }



2. どの HTML 要素がイベントのターゲットですか?
W3C/Netscape は次のように述べました: ターゲット。いいえ、Microsoft は、それは srcElement だと言いました。どちらのプロパティも、イベントが発生したときに HTML 要素を返します。

コードをコピー コードは次のとおりです。
function doSomething(e) {
var targ;
if (!e) var e = window.event;
if (e.target) = e.target;
else if (e.srcElement) 🎜>if (targ.nodeType == 3) // Safari のバグを無効にする
targ = targ.parentNode;
}


コードの最後の 2 行は、特にサファリ。テキストを含む要素でイベントが発生した場合、要素自体ではなくテキスト ノードがイベントのターゲットになります。したがって、ターゲットのノードタイプが 3 (テキスト ノード) であるかどうかを確認する必要があります。存在する場合は、それを親ノードである HTML 要素に移動します。
イベントがキャプチャされたりバブルアップしたりした場合でも、target/srcElement 属性はイベントが最も早く発生した要素のままです。
その他のターゲット
多くのターゲティング属性があります。 currentTarget についてはイベント順序の記事で説明し、relativeTarget、fromElement、toElement については記事 Mouse イベントで説明しました。


3. イベントが発生したときにどのキーが押されましたか?
この質問は比較的簡単です。まず keyCode 属性からキーのコード (a=65) を取得します。キー値を取得した後、必要に応じて String.fromCharCode() メソッドを通じて実際のキー値を知ることができます。


function doSomething(e) {
var code;
if (!e) var e = window.event;
if (e.keyCode) code = e.keyCode; 🎜>var 文字 = String.fromCharCode(code);
alert('文字は ' 文字でした);



キーボード イベントの使用が困難になる可能性のある場所がいくつかあります。たとえば、kepress イベントは、ユーザーがキーを押している間発生します。ただし、ほとんどのブラウザではキーダウンのトリガー時間は押した時間と同じ長さです。それが良い考えかどうかは分かりませんが、そういうことです。


4. イベントが発生したときにどのマウス ボタンが押されましたか?
ここには、どのマウス ボタンが押されたかを知るための 2 つのプロパティがあります: what と button。通常、これらのプロパティはクリック時に必ずしも機能するとは限らないことに注意してください。どのマウス ボタンが押されたかを安全に検出するには、mousedown イベントとmouseup イベントを使用することをお勧めします。
これは古い Netscape プロパティです。マウスの左ボタンの値は 1、中央ボタン (スクロール ホイール) の値は 2、マウスの右ボタンの値は 3 です。サポートが弱いことを除けば特に問題はありません。実際、マウスのボタンを検出するためによく使用されます。
ボタンの属性が適切に認識されるようになりました。 W3C の標準値は次のとおりです。
左ボタン 0
中ボタン 1
右ボタン 2
Microsoft の標準値は次のとおりです。
左ボタン 1
中ボタン4
右ボタン 2
Microsoft の標準が W3C の標準よりも優れていることは疑いの余地がありません。 0 はキーが押されていないことを意味し、それ以外はすべて不合理です。
また、Microsoft モデルのみ、ボタンの値を組み合わせることができます。たとえば、5 は「左ボタンと中ボタン」を同時に押すことを意味します。 IE6 はマージをサポートしていないだけでなく、w3c モデルは理論的に不可能です。左ボタンが押されたかどうかは決してわかりません。
つまり、私の意見では、w3c はボタンの定義において重大な間違いを犯したと考えています。

右クリック
幸いなことに、通常は、右ボタンがクリックされたかどうかを知りたいと考えます。 W3C と Microsoft はこの問題に関してたまたまボタンの値を 2 として定義しているため、引き続き右クリックを検出できます。
コードをコピー コードは次のとおりです。

function doSomething(e) {
var rightclick;
if (!e) var e = window.event;
if (e.that) rightclick = (e.that == 3);
else if (e.button) (e. button == 2);
alert('Rightclick: ' rightclick); // true または false
}


通常、Mac のみであることに注意してください。ボタンが 1 つある場合、Mozilla では Ctrl キーを押しながらクリックするボタンの値を 2 と定義しているため、Ctrl キーを押しながらクリックするとメニューも開きます。 ICab はまだマウス ボタンの属性をサポートしていないため、Opera では右クリックを検出できません。
5. イベントが発生したときのマウスの位置はどこですか?
マウスの位置の問題は非常に深刻です。マウス座標には少なくとも 6 つのプロパティがありますが、マウス座標を見つけるための信頼できるクロスブラウザーの方法はまだありません。
次の 6 つの座標セットです:
1. clientX、clientY
2. オフセット X、オフセット Y
4. 画面 X , screenY
6. x, y
pageX/Y と clientX/Y の問題についてはここで説明したことがあります。
screenX と screenY は、ブラウザー間で互換性のある唯一のプロパティのペアです。これらは、コンピュータ画面全体のマウスの座標を示します。残念ながら、この情報だけでは十分ではありません。マウスが画面上のどこにあるかを知る必要はありません。おそらく、現在のマウスの位置に新しいウィンドウを配置したいかもしれません。
他の 3 つの属性ペアは重要ではありません。ここでの説明を参照してください。
正しいコード
次のコードはマウスの座標を正しく検出できます


コードをコピーします コードは次のとおりです
function doSomething(e) {
var posx = 0;
if (!e) var e = window.event; >if (e .pageX || e.pageY) {
posx = e.pageX;
posy = e.pageY>}
else if (e.clientX || e.clientY) {
posx = e.clientX document.body.scrollLeft
document.documentElement.scrollLeft;
posy = e.clientY document.body.scrollTop
document.documentElement.scrollTop; 🎜>// posx と posy にはドキュメントに対する相対的なマウス位置が含まれます
// この情報を使って何かを行います
}



原文はこちら: http://www .quirksmode.org /js/events_properties.html

私の Twitter でアドバイスをください: @rehawk
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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)

JavaScriptの文字列文字を交換します JavaScriptの文字列文字を交換します Mar 11, 2025 am 12:07 AM

JavaScript文字列置換法とFAQの詳細な説明 この記事では、javaScriptの文字列文字を置き換える2つの方法について説明します:内部JavaScriptコードとWebページの内部HTML。 JavaScriptコード内の文字列を交換します 最も直接的な方法は、置換()メソッドを使用することです。 str = str.replace( "find"、 "置換"); この方法は、最初の一致のみを置き換えます。すべての一致を置き換えるには、正規表現を使用して、グローバルフラグGを追加します。 str = str.replace(/fi

独自のAjax Webアプリケーションを構築します 独自のAjax Webアプリケーションを構築します Mar 09, 2025 am 12:11 AM

それで、あなたはここで、Ajaxと呼ばれるこのことについてすべてを学ぶ準備ができています。しかし、それは正確には何ですか? Ajaxという用語は、動的でインタラクティブなWebコンテンツを作成するために使用されるテクノロジーのゆるいグループ化を指します。 Ajaxという用語は、もともとJesse Jによって造られました

10 jQueryの楽しみとゲームプラグイン 10 jQueryの楽しみとゲームプラグイン Mar 08, 2025 am 12:42 AM

10の楽しいjQueryゲームプラグインして、あなたのウェブサイトをより魅力的にし、ユーザーの粘着性を高めます! Flashは依然としてカジュアルなWebゲームを開発するのに最適なソフトウェアですが、jQueryは驚くべき効果を生み出すこともできます。また、純粋なアクションフラッシュゲームに匹敵するものではありませんが、場合によってはブラウザで予期せぬ楽しみもできます。 jquery tic toeゲーム ゲームプログラミングの「Hello World」には、JQueryバージョンがあります。 ソースコード jQueryクレイジーワードコンポジションゲーム これは空白のゲームであり、単語の文脈を知らないために奇妙な結果を生み出すことができます。 ソースコード jquery鉱山の掃引ゲーム

独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? 独自のJavaScriptライブラリを作成および公開するにはどうすればよいですか? Mar 18, 2025 pm 03:12 PM

記事では、JavaScriptライブラリの作成、公開、および維持について説明し、計画、開発、テスト、ドキュメント、およびプロモーション戦略に焦点を当てています。

jQuery Parallaxチュートリアル - アニメーションヘッダーの背景 jQuery Parallaxチュートリアル - アニメーションヘッダーの背景 Mar 08, 2025 am 12:39 AM

このチュートリアルでは、jQueryを使用して魅惑的な視差の背景効果を作成する方法を示しています。 見事な視覚的な深さを作成するレイヤー画像を備えたヘッダーバナーを構築します。 更新されたプラグインは、jQuery 1.6.4以降で動作します。 ダウンロードしてください

ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? ブラウザでのパフォーマンスのためにJavaScriptコードを最適化するにはどうすればよいですか? Mar 18, 2025 pm 03:14 PM

この記事では、ブラウザでJavaScriptのパフォーマンスを最適化するための戦略について説明し、実行時間の短縮、ページの負荷速度への影響を最小限に抑えることに焦点を当てています。

jqueryとajaxを使用した自動更新Divコンテンツ jqueryとajaxを使用した自動更新Divコンテンツ Mar 08, 2025 am 12:58 AM

この記事では、JQueryとAjaxを使用して5秒ごとにDivのコンテンツを自動的に更新する方法を示しています。 この例は、RSSフィードからの最新のブログ投稿と、最後の更新タイムスタンプを取得して表示します。 読み込み画像はオプションです

Matter.jsを始めましょう:はじめに Matter.jsを始めましょう:はじめに Mar 08, 2025 am 12:53 AM

Matter.jsは、JavaScriptで書かれた2D Rigid Body Physics Engineです。このライブラリは、ブラウザで2D物理学を簡単にシミュレートするのに役立ちます。剛体を作成し、質量、面積、密度などの物理的特性を割り当てる機能など、多くの機能を提供します。また、重力摩擦など、さまざまな種類の衝突や力をシミュレートすることもできます。 Matter.jsは、すべての主流ブラウザをサポートしています。さらに、タッチを検出し、応答性が高いため、モバイルデバイスに適しています。これらの機能はすべて、物理ベースの2Dゲームまたはシミュレーションを簡単に作成できるため、エンジンの使用方法を学ぶために時間をかける価値があります。このチュートリアルでは、このライブラリのインストールや使用法を含むこのライブラリの基本を取り上げ、

See all articles