マウスイベント
マウスイベントの種類
マウスイベントには主に以下があり、全てのイベントがMouseEvent
インターフェースを継承します(詳細は下記を参照)。
(1) クリックイベント
マウスクリックに関連するイベントは 4 つあります。
-
click
: マウスが押されたときに (通常は主ボタンが押されたときに) 発生します。 -
dblclick
: 同じ要素をマウスでダブルクリックするとトリガーされます。 -
mousedown
: マウスボタンが押されたときにトリガーされます。 -
mouseup
: 押されたマウス ボタンが放されると発生します。
click
mousedown
イベントは、ユーザーが最初にトリガーし、次に同じ場所でトリガーするという 2 つのイベントで構成されていると見なすことができますmouseup
。したがって、点火の順序は、mousedown
最初に点火し、mouseup
次に点火し、click
最後に点火することになります。
ダブルクリックすると、 、、の後にdblclick
イベントがトリガーされます。mousedown
mouseup
click
(2) モバイルイベント
マウスの動きに関連するイベントは 5 つあります。
-
mousemove
: マウスがノード内を移動するとトリガーされます。このイベントは、マウスが動き続けると継続的に発生します。パフォーマンスの問題を回避するために、このイベントのリスニング機能にいくつかの制限を設けることをお勧めします。たとえば、一定期間内に 1 回のみ実行できるようにします。 -
mouseenter
: このイベントは、マウスがノードに入ったときにトリガーされますが、マウスが子ノードに入ったときにはトリガーされません (詳細は以下を参照)。 -
mouseover
: マウスがノードに入るとトリガーされ、このイベントはマウスが子ノードに入ると再びトリガーされます (詳細は以下を参照)。 -
mouseout
: マウスがノードから離れるときにトリガーされ、このイベントはマウスが親ノードから離れるときにもトリガーされます (詳細は以下を参照)。 -
mouseleave
: マウスがノードから離れるとトリガーされます。親ノードを離れるとこのイベントはトリガーされません (詳細は以下を参照)。
mouseover
mouseenter
マウスがノードに入ると、イベントとイベントの両方がトリガーされます。2 つの違いは、mouseenter
イベントは 1 回だけトリガーされ、マウスがノード内を移動している限り、mouseover
イベントは子ノードで複数回トリガーされることです。
/* HTML コードは次のとおりです。 <ul> <li>項目 1</li> <li>項目 2</li> <li>項目 3</li> </ul> */ var ul = document. querySelector(' ul'); // ul ノードに入ると、mouseenter イベントは 1 回だけトリガーされます // マウスがノード内で移動する限り、このイベントは再度トリガーされません // events.target は、 ul ノード ul.addEventListener('mouseenter' , function (event) { event.target.style.color = 'purple'; setTimeout(function () { event.target.style.color = ''; }, 500); } , false); // ul を入力します ノードの後、子ノード上を移動している限り、mouseover イベントが複数回トリガーされます // events.target は li ノードです ul.addEventListener('mouseover',function (event) { event.target.style.color = 'orange'; setTimeout(function() { イベント.ターゲット.スタイル.カラー = ''; }, 500); }、 間違い);
上記のコードでは、親ノード内に子ノードを入力してもmouseenter
イベントはトリガーされませんが、mouseover
イベントはトリガーされます。
mouseout
mouseleave
マウスがノードから離れると、イベントとイベントの両方がトリガーされます。mouseleave
2 つの違いは、イベントが発生する一方で、親要素内に子要素を残すとmouseout
イベントが発生しないことです。
/* HTML コードは次のとおりです。 <ul> <li>項目 1</li> <li>項目 2</li> <li>項目 3</li> </ul> */ var ul = document. querySelector(' ul'); // 最初に ul ノードに入り、次にノード内に移動すると、mouseleave イベントはトリガーされません // ul ノードから出るときのみ、mouseleave が 1 回トリガーされます // events.target はUL ノード ul.addEventListener('mouseleave', function (event) { event.target.style.color = 'purple'; setTimeout(function () { event.target.style.color = ''; }, 500); }, false); // ul 最初のノードを入力し、次にノード内に移動すると、mouseout イベントが複数回トリガーされます // events.target は li ノードです ul.addEventListener('mouseout',関数 (イベント) { setTimeout(関数() { イベント.ターゲット.スタイル.カラー = ''; }, 500); }、 間違い);
上記のコードでは、子ノードを親ノード内に残しておくとmouseleave
イベントはトリガーされませんが、mouseout
イベントはトリガーされます。
(3) その他のイベント
-
contextmenu
: マウスの右ボタンが押されたとき (コンテキスト メニューが表示される前)、または [コンテキスト] メニュー キーが押されたときに発生します。 -
wheel
: マウス ホイールを回転するとトリガーされ、このイベントはインターフェイスを継承しますWheelEvent
。
MouseEventインターフェース
MouseEvent
このインターフェイスは、クリック (click)、ダブルクリック (dblclick)、マウス ボタンを放す (mouseup)、マウス ボタンを押す (mousedown) などのマウス関連のイベントを表し、生成されるイベント オブジェクトはすべて インスタンス ですMouseEvent
。さらに、ホイール イベントやドラッグ イベントもMouseEvent
インスタンスです。
MouseEvent
このインターフェイスは、Event
インターフェイスのすべてのプロパティとメソッドを継承しEvent
、マウスに固有のプロパティとメソッドも提供します。
ブラウザーは、MouseEvent()
新しいMouseEvent
インスタンスを作成するためのコンストラクターをネイティブに提供します。
var イベント = 新しい MouseEvent(タイプ, オプション);
MouseEvent()
コンストラクターは 2 つのパラメーターを受け取ります。最初のパラメータはイベントの名前を示す文字列で、2 番目のパラメータはイベント設定オブジェクト (オプション) です。Event
インターフェイスのインスタンス構成プロパティに加えて、オブジェクトは次のプロパティで構成できます。これらはすべてオプションです。
-
screenX
: 数値、画面に対するマウスの水平位置 (単位ピクセル)、デフォルト値は 0、このプロパティを設定するとマウスは移動しません。 -
screenY
:数値、画面に対するマウスの垂直位置(ピクセル単位)、その他は とscreenX
同じです。 -
clientX
: 数値、プログラム ウィンドウに対するマウスの水平位置 (ピクセル単位)。デフォルト値は 0 です。このプロパティを設定するとマウスは移動しません。 -
clientY
:数値、プログラムウィンドウに対するマウスの垂直位置(ピクセル単位)、他は同様ですclientX
。 -
ctrlKey
: ブール値。Ctrl キーが同時に押されているかどうか、デフォルトは ですfalse
。 -
shiftKey
: ブール値。Shift キーが同時に押されているかどうか、デフォルトは ですfalse
。 -
altKey
: ブール値。Alt キーを同時に押すかどうか。デフォルトは ですfalse
。 -
metaKey
: ブール値。Meta キーを同時に押すかどうか。デフォルトは ですfalse
。 -
button
: どのマウス ボタンが押されているかを示す値。デフォルト値は で、0
主ボタン (通常はマウスの左ボタン) が押されているか、現在のイベントでこのプロパティが定義されていないことを示します。1
補助ボタンが押されていることを示します (通常はマウスの中央ボタン)、2
二次キー (通常はマウスの右ボタン) が押されたことを示します。 -
buttons
: マウスのどのキーが押されたかを示す数値。3 ビットのバイナリ値で、デフォルトは0
(キーが押されていない) です。1
(binary001
) は主キー (通常は左キー) が押されたことを意味し、2
(binary010
) は副キー (通常は右キー) が押されたことを意味し、4
(binary100
) は副キー (通常は中央キー) が押されたことを意味します。3
したがって、 (binary )が返された場合は、011
左ボタンと右ボタンが同時に押されたことを意味します。 -
relatedTarget
: イベントの関連ノードを表すノード オブジェクト。デフォルトは ですnull
。mouseenter
andeventの場合はmouseover
マウスが去ったばかりの要素ノードを示し、 eventの場合mouseout
はmouseleave
マウスが入っている要素ノードを示します。
以下に例を示します。
function SimulateClick() { var イベント = new MouseEvent('click', { 'bubbles': true, 'cancelable': true }); var cb = document.getElementById('チェックボックス'); cb.dispatchEvent(イベント); }
上記のコードは、マウス クリック イベントを生成し、イベントをトリガーします。
MouseEvent インターフェイスのインスタンス プロパティ
MouseEvent.altKey、MouseEvent.ctrlKey、MouseEvent.metaKey、MouseEvent.shiftKey
MouseEvent.altKey
、、、、これら4 つのプロパティはすべて、イベントの発生時に対応するキーが押されMouseEvent.ctrlKey
たかどうかを示すブール値を返します。これらはすべて読み取り専用のプロパティです。MouseEvent.metaKey
MouseEvent.shiftKey
-
altKey
属性: Alt キー -
ctrlKey
属性: Ctrlキー -
metaKey
属性: メタキー (Mac キーボードは 4 枚の花びらの花、Windows キーボードは Windows キー) -
shiftKey
属性: シフトキー
// HTML 代码如下 // <body οnclick="showKey(event)"> function showKey(e) { console.log('ALT キーが押されました: ' + e.altKey); console.log('CTRL キーが押されました: ' + e.ctrlKey); console.log('META キーが押されました: ' + e.metaKey); console.log('SHIFT キーが押されました: ' + e.shiftKey); }
上記のコードでは、Web ページをクリックすると、対応するキーが同時に押されたかどうかが出力されます。
マウスイベント.ボタン,マウスイベント.ボタン
MouseEvent.button
このプロパティは、イベントの発生時にどのマウス ボタンが押されたかを示す番号を返します。このプロパティは読み取り専用です。
-
0: 主キー (通常は左キー) が押されたか、イベントによってこのプロパティが初期化されません (
mousemove
イベントなど)。 -
1: 修飾キー (通常は中央のキーまたはスクロール ホイール キー) を押します。
-
2: 次のキー (通常は右のキー) を押します。
// HTML代码です // <button οnmοuseup="thatButton(event)">点击</button> var whatButton = function (e) { switch (e.button) { case 0: console.log('左ボタンがクリックされました。 '); 壊す; ケース 1: console.log('中央のボタンがクリックされました。'); 壊す; ケース 2: console.log('右ボタンがクリックされました。'); 壊す; デフォルト: console.log('予期しないコード: ' + e.button); } }
MouseEvent.buttons
このプロパティは、どのキーが同時に押されたかを示す 3 ビットの値を返します。複数のマウス ボタンが同時に押された状況を処理するために使用されます。このプロパティは読み取り専用です。
-
1: 2 進数は
001
(10 進数の 1)、左ボタンが押されたことを意味します。 -
2: 2 進数は
010
(10 進数の 2)、右ボタンを押すことを意味します。 -
4: 2 進数は
100
(10 進数の 4)、中央ボタンまたはホイール ボタンを押すことを意味します。
複数のキーが同時に押されると、押された各キーに対応するビットに値が設定されます。たとえば、左ボタンと右ボタンを同時に押すと、3 (2 進数で 011) が返されます。
MouseEvent.clientX,MouseEvent.clientY
MouseEvent.clientX
このプロパティは、ブラウザ ウィンドウの左上隅を基準としたマウス位置の水平座標 (ピクセル単位) を返し、プロパティはMouseEvent.clientY
垂直座標を返します。どちらのプロパティも読み取り専用プロパティです。
// HTML 代コードです // <body οnmοusedοwn="showCoords(event)"> function showCoords(evt){ console.log( 'clientX value: ' + evt.clientX + '\n' + 'clientY value: ' + evt .clientY + '\n' ); }
これら 2 つのプロパティには、エイリアスMouseEvent.x
ともありますMouseEvent.y
。
MouseEvent.movementX,MouseEvent.movementY
MouseEvent.movementX
プロパティは、現在の位置と前のイベントmousemove
の間の水平距離 (ピクセル単位)を返します。数値的には以下の計算式と等しくなります。
currentEvent.movementX = currentEvent.screenX -PreviousEvent.screenX
MouseEvent.movementY
プロパティは、現在の位置と前のイベントmousemove
の間の垂直距離 (ピクセル単位)を返します。数値的には以下の計算式と等しくなります。
currentEvent.movementY = currentEvent.screenY -PreviousEvent.screenY。
どちらのプロパティも読み取り専用プロパティです。
MouseEvent.screenX,MouseEvent.screenY
MouseEvent.screenX
このプロパティは、画面の左上隅を基準としたマウス位置の水平座標 (単位ピクセル) を返し、プロパティはMouseEvent.screenY
垂直座標を返します。どちらのプロパティも読み取り専用プロパティです。
// HTML コードは次のとおりです // <body Onmοusedοwn="showCoords(event)"> function showCoords(evt) { console.log( 'screenX value: ' + evt.screenX + '\n', 'screenY value: ' + evt .screenY + '\n' ); }
MouseEvent.offsetX,MouseEvent.offsetY
MouseEvent.offsetX
このプロパティは、padding
マウスの位置とターゲット ノードの左側のエッジの間の水平距離 (ピクセル単位) を返し、MouseEvent.offsetY
ターゲット ノードの上のエッジからのpadding
垂直距離を返します。どちらのプロパティも読み取り専用プロパティです。
/* HTML 代码如下 <style> p { width: 100px; 高さ: 100ピクセル; パディング: 100px; </style> <p> こんにちは</p> */ var p = document.querySelector('p'); p.addEventListener( 'click', function (e) { console.log(e.offsetX); console.log(e.offsetY); }, false );
上記のコードでは、マウスがp
要素の中心をクリックすると、 が返されます150 150
。したがって、中心位置は、左端と上端の幅(100 ピクセル) に要素のコンテンツ領域の幅の半分 (50 ピクセル) を加えたものとpadding
等しくなります。padding
MouseEvent.pageX,MouseEvent.pageY
MouseEvent.pageX
このプロパティは、マウスの位置とドキュメントの左端の間の距離 (ピクセル単位) を返し、プロパティはMouseEvent.pageY
ドキュメントの上端からの距離 (ピクセル単位) を返します。それらの戻り値にはすべて、ドキュメントの目に見えない部分が含まれています。どちらのプロパティも読み取り専用です。
/* HTML代码如下 <style> body { height: 2000px; } </style> */ document.body.addEventListener( 'click', function (e) { console.log(e.pageX); console.log(e.pageY); }, false );
上記のコードでは、ページの高さは 2000 ピクセルで、垂直スクロール バーが生成されます。ページの一番下までスクロールしてマウスをクリックすると、pageY
2000 に近い値が出力されます。
MouseEvent.関連ターゲット
MouseEvent.relatedTarget
プロパティはイベントに関連付けられたノードを返します。関連付けられたノードがないイベントの場合、このプロパティが返されますnull
。このプロパティは読み取り専用です。
次の表に、さまざまなイベントのtarget
プロパティ値とrelatedTarget
プロパティ値の定義を示します。
イベント名 | ターゲット属性 | 関連ターゲット プロパティ |
---|---|---|
集中する | フォーカスを受け取るノード | 焦点が合っていないノード |
フォーカスアウト | 焦点が合っていないノード | フォーカスを受け取るノード |
マウスエンター | 入るノード | 離れるノード |
マウスを離れる | 離れるノード | 入るノード |
マウスアウト | 離れるノード | 入るノード |
マウスオーバー | 入るノード | 離れるノード |
キャリア | 入るノード | 離れるノード |
彼は引きずった | 離れるノード | 入るノード |
以下に例を示します。
/* HTML コードは次のとおりです。 <div id= "outer" style="height:50px;width:50px;border:1px plain black;"> <div id= "inner" style="height: 25px;width: 25px;border :1pxソリッドブラック;"></div> </div> */ var inner = document.getElementById('inner'); inner.addEventListener('mouseover', function (event) { console.log(' enter' +event.target.id + 'leave' +event.popularTarget.id); }, false); inner.addEventListener('mouseenter', function (event) { console.log('enter' +event.target. id + 'leave' +event.popularTarget.id); }); inner.addEventListener('mouseout', function (event) { console.log('leave' +event.target.id + 'enter' +event.popularTarget.id);log('leave' +event.target.id + 'enter' +event.popularTarget.id); }); inner.addEventListener("mouseleave", function (event){ console.log('leave' +event.target.id + 'enter' +event.popularTarget.id); }); // マウスが外側から内側に入り、出力 // 内側に入り、外側を離れます // 内側に入り、外側を離れます // マウスは内側から外側に入り、出力します // 内側を離れ、外側に入ります // 内側を離れ、外側を入力します
MouseEvent インターフェイスのインスタンス メソッド
MouseEvent.getModifierState()
MouseEvent.getModifierState
このメソッドは、特定のファンクション キーが押されたかどうかを示すブール値を返します。その引数は、ファンクション キーを表す文字列です。
document.addEventListener('click', function (e) { console.log(e.getModifierState('CapsLock')); }, false);
上記のコードは、ユーザーが Caps キーを押したかどうかを調べます。
WheelEvent インターフェース
概要
WheelEvent インターフェイスは、マウス ホイール イベントのインスタンス オブジェクトを表す MouseEvent インスタンスを継承します。現在、マウス ホイールに関連するイベントは 1 つだけありwheel
、ユーザーがマウス ホイールを回すと、このイベントのインスタンスが生成されます。
WheelEvent()
ブラウザーは、インスタンスを生成するためのコンストラクターをネイティブに提供しますWheelEvent
。
var WheelEvent = 新しい WheelEvent(タイプ, オプション);
WheelEvent()
コンストラクターは 2 つのパラメーターを受け入れることができます。1 つ目はイベント タイプを示す文字列です。ホイール イベントの場合、この値は のみですwheel
。2 番目のパラメーターは、イベントの構成オブジェクトです。Event
の構成プロパティに加えて、このオブジェクトのプロパティはUIEvent
次のプロパティも受け入れることができます。これらはすべてオプションです。
-
deltaX
: スクロール ホイールの水平スクロール量を示す数値。デフォルト値は 0.0 です。 -
deltaY
: スクロール ホイールの垂直スクロール量を示す数値。デフォルト値は 0.0 です。 -
deltaZ
: スクロール ホイールの Z 軸スクロール量を示す数値。デフォルト値は 0.0 です。 -
deltaMode
: 上記 3 つのプロパティに適用される、関連するスクロール イベントの単位を表す数値。0
スクロール単位がピクセル、1
単位がライン、2
単位がページであることを示し、デフォルトは です0
。
インスタンス属性
WheelEvent
イベント インスタンスのインスタンス属性とインスタンス メソッドにEvent
加えて、独自のインスタンス属性もいくつかありますが、独自のインスタンス メソッドはありません。MouseEvent
次のプロパティはすべて読み取り専用のプロパティです。
-
WheelEvent.deltaX
: スクロール ホイールの水平スクロール量を示す数値。 -
WheelEvent.deltaY
: スクロール ホイールの垂直スクロール量を示す数値。 -
WheelEvent.deltaZ
:スクロールホイールのZ軸スクロール量を示す数値。 -
WheelEvent.deltaMode
0
:上記3つのプロパティ(ピクセル、1
ライン、ページ)の単位を示す数値2
。