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

イベントに関する情報を読みたいとき、多くの場合、多数の属性に埋もれてしまいますが、そのほとんどはほとんどのブラウザーでは適切に動作しません。イベント互換性リストは次のとおりです。
これらの属性のリストは作成しません。これらの状況は非常に混乱しており、学習にはまったく役立ちません。 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 までご連絡ください。
JavaScriptの進化:現在の傾向と将来の見通しJavaScriptの進化:現在の傾向と将来の見通しApr 10, 2025 am 09:33 AM

JavaScriptの最新トレンドには、TypeScriptの台頭、最新のフレームワークとライブラリの人気、WebAssemblyの適用が含まれます。将来の見通しは、より強力なタイプシステム、サーバー側のJavaScriptの開発、人工知能と機械学習の拡大、およびIoTおよびEDGEコンピューティングの可能性をカバーしています。

javascriptの分解:それが何をするのか、なぜそれが重要なのかjavascriptの分解:それが何をするのか、なぜそれが重要なのかApr 09, 2025 am 12:07 AM

JavaScriptは現代のWeb開発の基礎であり、その主な機能には、イベント駆動型のプログラミング、動的コンテンツ生成、非同期プログラミングが含まれます。 1)イベント駆動型プログラミングにより、Webページはユーザー操作に応じて動的に変更できます。 2)動的コンテンツ生成により、条件に応じてページコンテンツを調整できます。 3)非同期プログラミングにより、ユーザーインターフェイスがブロックされないようにします。 JavaScriptは、Webインタラクション、シングルページアプリケーション、サーバー側の開発で広く使用されており、ユーザーエクスペリエンスとクロスプラットフォーム開発の柔軟性を大幅に改善しています。

pythonまたはjavascriptの方がいいですか?pythonまたはjavascriptの方がいいですか?Apr 06, 2025 am 12:14 AM

Pythonはデータサイエンスや機械学習により適していますが、JavaScriptはフロントエンドとフルスタックの開発により適しています。 1. Pythonは、簡潔な構文とリッチライブラリエコシステムで知られており、データ分析とWeb開発に適しています。 2。JavaScriptは、フロントエンド開発の中核です。 node.jsはサーバー側のプログラミングをサポートしており、フルスタック開発に適しています。

JavaScriptをインストールするにはどうすればよいですか?JavaScriptをインストールするにはどうすればよいですか?Apr 05, 2025 am 12:16 AM

JavaScriptは、最新のブラウザにすでに組み込まれているため、インストールを必要としません。開始するには、テキストエディターとブラウザのみが必要です。 1)ブラウザ環境では、タグを介してHTMLファイルを埋め込んで実行します。 2)node.js環境では、node.jsをダウンロードしてインストールした後、コマンドラインを介してJavaScriptファイルを実行します。

クォーツでタスクが開始される前に通知を送信する方法は?クォーツでタスクが開始される前に通知を送信する方法は?Apr 04, 2025 pm 09:24 PM

Quartzタイマーを使用してタスクをスケジュールする場合、Quartzでタスク通知を事前に送信する方法、タスクの実行時間はCron式によって設定されます。今...

JavaScriptでは、コンストラクターのプロトタイプチェーンで関数のパラメーターを取得する方法は?JavaScriptでは、コンストラクターのプロトタイプチェーンで関数のパラメーターを取得する方法は?Apr 04, 2025 pm 09:21 PM

JavaScriptプログラミング、プロトタイプチェーンの関数パラメーターの理解と操作のJavaScriptのプロトタイプチェーンの関数のパラメーターを取得する方法は、一般的で重要なタスクです...

WeChat MiniプログラムWebViewでVUE.JSダイナミックスタイルの変位が失敗した理由は何ですか?WeChat MiniプログラムWebViewでVUE.JSダイナミックスタイルの変位が失敗した理由は何ですか?Apr 04, 2025 pm 09:18 PM

WeChatアプレットWeb-ViewでVue.jsを使用する動的スタイルの変位障害がvue.jsを使用している理由の分析...

TamperMonkeyで複数のリンクの同時GETリクエストを実装し、順番に戻る結果を決定する方法は?TamperMonkeyで複数のリンクの同時GETリクエストを実装し、順番に戻る結果を決定する方法は?Apr 04, 2025 pm 09:15 PM

複数のリンクの同時ゲットリクエストを作成し、結果を返すために順番に判断する方法は? TamperMonkeyスクリプトでは、複数のチェーンを使用する必要があることがよくあります...

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

PhpStorm Mac バージョン

PhpStorm Mac バージョン

最新(2018.2.1)のプロフェッショナル向けPHP統合開発ツール

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

MantisBT

MantisBT

Mantis は、製品の欠陥追跡を支援するために設計された、導入が簡単な Web ベースの欠陥追跡ツールです。 PHP、MySQL、Web サーバーが必要です。デモおよびホスティング サービスをチェックしてください。

SublimeText3 中国語版

SublimeText3 中国語版

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