English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
さまざまなブラウザでは、以下の4種類のイベントモデルが存在します:基本的なイベントモデル、標準のイベントモデル、IEのイベントモデル、Netscapeのイベントモデルがあります。4イベントモデルについて具体的に説明します。
1、現在存在する4種類のイベントハンドラモデルは以下の通りです:基本的なイベントモデル、標準のイベントモデル、IEのイベントモデル、Netscapeのイベントモデルがあります。4イベントモデルですが、基本的には無視できます。
2、イベントハンドラモデルは基本的なイベントハンドラと高度なイベントハンドラの2種類に分類されます。基本的なイベントモデルは基本的なイベントハンドラに属しますが、標準のイベントモデルとIEのイベントモデルは高度なイベントハンドラに属します。
1、基本的なイベントハンドラ:
基本的なイベントハンドラは、基本的なイベントモデルを実装したイベントハンドラです。主に以下の2種類に分類されます:
(1)、HTMLタグの性質としてのイベントハンドラ、例:<div onmouseover=”var a=1; alert();”>……</div> //ここでは、onmouseoverは単なる代表であり、他の多くのイベントも含まれています。
この方法では、onmouseoverなどイベントハンドラに割り当てられるのはJSコード文字列で、システムはこれらのコード文字列を自動的に匿名関数に包装します。この中にはthisキーワードがあり、それはこのタグ要素を指し、eventキーワードがあり、それはイベントが発生したときのイベントオブジェクトを表します(標準ブラウザで使用されます)。例:<div onmouseover=”f(this,event);”>……</div>
実際には、onmouseoverなどを見なすことができます。値が割り当てられる前に、それは空関数です。jsコードが割り当てられると、それは空関数にコードが追加されたことに相当します。onmouseoverなどが実際には関数であるため、明示的に呼び出すことができます、例えばelement.onmouseover()ですが、これによりmouseoverイベントが実際に発生することはありません。
イベント関数(例えばonmoouseoverなど)にfalseを返すことで、デフォルトの動作の発生を防ぐことができます。
関数はその定義された範囲で実行されるため、イベントハンドラ関数にjsコードを割り当てることは、このHTMLタグ環境で関数を定義することに相当します。この環境は特別で、高次の作用域はwindowグローバルオブジェクト環境ではなく、その間には少なくとも1つの作用域環境が存在します。そして、<script>内で定義された関数は、その高次の作用域環境はwindowです(もちろん、ネストされた関数は別の問題です)。したがって、HTMLタグ内では、コードを<script>内で定義された関数に置き、その関数を呼び出してイベント関数に割り当てるのが最善です、例:<div onmouseover=“function();”>……</div>
(2)、JavaScript属性としてのイベントハンドラ
この方法では、イベントハンドラ関数にjsコード文字列を割り当てることはできません。代わりに、関数(関数呼び出しではない)を直接割り当てるか、匿名関数を割り当てます。例えば、element.onmouseover = function() {……} または element.onmouseover = f; fは関数であり、ここでは括弧を付けません
基本的なイベント処理も冒泡として上に伝播されます
二、高度なイベント処理:
高度なイベント処理は、標準イベントモデルとIEイベントモデルで実現されるイベント処理を指します
【概念理解】イベントの伝播は、キャプチャー伝播と冒泡伝播の2種類に分けられます
キャプチャー伝播:つまり、イベントが外部から内部に伝播し、各レベルでイベントが発生します
冒泡伝播;つまり、イベントが内部から外部に伝播し、各レベルでイベントが発生しますが、すべてのイベントが冒泡するわけではありません
(1)標準イベントモデル
標準イベントモデルは、冒泡伝播とキャプチャー伝播の両方を発生させます
【イベント登録関数】
例えば:element.addEventListener( //fは関数です
f関数は以下のように定義できます:function f(e){……} //その引数はイベントが発生したときにEventオブジェクトを表します
高度なイベント処理の大きな利点は、同じ要素に複数のイベントハンドラを登録できることです。これらのイベントハンドラの実行順序は決まっていませんが、一般的には登録の順序に従って実行されます。重複のイベントハンドラが登録された場合、最初に登録されたものだけが有効になります。
removeEventListener() このメソッドはイベントの登録を解除するもので、addEventListener() と同じ3つの引数を持っています
(2)IEイベントモデル
IEイベントモデルは、イベントバブル伝播をサポートしています
【イベント登録関数】
2パラメータは、イベント名の1つで、注意してほしいのは、前縁があるon、2つ目はイベントハンドラ関数です。例えば、element.attachEvent(
IEイベントモデルのEventオブジェクトは、イベント発生時にイベントハンドラ関数の引数として渡されるのではなく、IEのEventオブジェクトはwindowのグローバルオブジェクトで、イベント発生時にのみアクセスできます
したがって、f関数は以下のように定義できます:function f(){var e=window.event;……} //その中でeはEventオブジェクトを取得します
detachEvent()は、イベント登録を解除するために使用される方法で、引数はattachEvent()と同じです
addEventListener()とattachEvent()の重要な違いは、attachEvent()で登録されたイベントハンドラ関数のthisキーワードが常にwindowオブジェクトを指し、addEventListener()で登録されたイベントハンドラ関数のthisは発生したイベントの要素を指すことです
(3)、IEと標準イベントモデルのEventオブジェクトの比較
IEイベントオブジェクト |
IEイベントオブジェクト |
標準イベントオブジェクト |
標準イベントオブジェクト |
altKey |
trueはALTキーが押されていることを示し、falseは押されていないことを示します |
altKey |
trueはALTキーが押されていることを示し、falseは押されていないことを示します |
ctrlKey |
trueはCTRLキーが押されていることを示し、falseは押されていないことを示します |
ctrlKey |
trueはCTRLキーが押されていることを示し、falseは押されていないことを示します |
shiftKey |
trueはSHIFTキーが押されていることを示し、falseは押されていないことを示します |
shiftKey |
trueはSHIFTキーが押されていることを示し、falseは押されていないことを示します |
button |
マウスイベント。0はマウスボタンが押されていないことを示します1左ボタンを押下として2右ボタンを押下として4中央ボタンとして3左右ボタンを同時に押下として5左ボタンと中ボタンを押下として6右ボタンと中ボタンを押下として7左ボタン、中ボタン、右ボタンを押下として |
button |
0は左ボタンとして、1中ボタンとして、2右ボタンとして |
clientX |
イベント発生時、マウスがブラウザウィンドウ(ツールバー、スクロールバーなどを含まない)のX座標 |
clientX |
イベント発生時、マウスがブラウザウィンドウ(ツールバー、スクロールバーなどを含まない)のX座標 |
clientY |
同上 |
clientY |
同上 |
screenX |
イベント発生時、マウスがスクリーン全体上でのX座標 |
screenX |
イベント発生時、マウスがスクリーン全体上でのX座標 |
screenY |
同上 |
screenY |
同上 |
type |
イベントの名前(例:click) |
type |
イベントの名前(例:click) |
srcElement |
イベントを引き起こす要素 |
target |
イベントを引き起こす要素 |
keyCode |
keypressイベントは、ボタンのUnicode文字を表し、keydownおよびkeyupイベントではボタンの数字コードを表します |
charCode |
キーのUnicode文字を表します。 |
keyCode |
キーの数字コードを表します。 |
||
cancelBubble |
trueの場合、イベントが上方向にバブルアップを停止します。 |
stopPropagation |
このメソッドを呼び出すことで、イベントが上方向にバブルアップを停止できます。 |
cancelBubble |
trueの場合、イベントのバブルがキャンセルされています。falseの場合、キャンセルされていません。 |
||
returnValue |
falseの場合、イベントのデフォルト動作を停止します。 |
preventDefault() |
このメソッドを呼び出すことで、イベントのデフォルト動作を停止できます。 |
offsetX |
イベントが発生した時の、イベントを発生させた要素に対するマウスのX座標を取得し、その要素の左上隅を原点としています(paddingやmarginは計算されません)。 |
layerX |
イベントを発生させた要素に動的配置が設定されていない場合、マウスのX座標を取得し、その要素の最も近い、動的配置が設定された親要素の枠の左上隅を原点としています。 イベントを発生させた要素に動的配置が設定されている場合、マウスのX座標を取得し、その要素の枠の左上隅を原点としています。 |
x |
マウスのX座標を取得し、イベントを発生させた要素の最も近い、動的配置が設定された親要素の枠の左上隅を原点としています。 |
これで本文のすべての内容が終わります。皆様の学習に役立つことを願っています。また、呐喊教程を多くの皆様にサポートしていただけると嬉しいです。
声明:本文の内容はインターネットから提供されています。著作権は原著者に帰属します。インターネットユーザーにより自発的に貢献し、自己でアップロードされています。本サイトは所有権を持ちません。人工的な編集は行われていません。また、関連する法的責任を負いません。著作権侵害を疑う内容がある場合は、メールを送信して:notice#wまでお知らせください。3codebox.com(メール送信時は、#を@に変更してください。通報をいただき、関連証拠を提供してください。一旦確認がついたら、本サイトは侵害疑いのコンテンツをすぐに削除します。)