* 仕様書

[REFS[
- [6] [CITE@en-US-x-hixie[HTML Standard]] ([TIME[2013-05-05 06:42:10 +09:00]] 版) <http://www.whatwg.org/specs/web-apps/current-work/#fire-a-synthetic-mouse-event>
- [39] [CITE@en[Pointer Lock]] ([TIME[2016-10-19 08:10:29 +09:00]]) <https://w3c.github.io/pointerlock/#h-extensions-to-the-mouseevent-interface>
]REFS]

* マウス操作

[22] 次の各項も参照。
[FIG(short list)[
- [[クリック]]
- [[ドラッグアンドドロップ]]
- [[マウスジェスチャー]]
- [[タッチ操作]]
]FIG]

[27] [[マウス]]の[[クリック]]は、[[フォーカス]]の移動を発生させます。
[[クリック]]は、[[マウス]]の[[ボタン]]の押下の後、ただちに元に戻す操作です。
つまり [CODE(DOMe)@en[mousedown]] と [CODE(DOMe)@en[mouseup]] 
が[[クリック]]に前後して発生します。
両操作にどれだけの間隔が認められるかは、[[プラットフォームの慣習]]によります。

;; [68] [[OS]] によっては、設定で[[クリック]]とみなす間隔を[[利用者]]が調整できます。

[69] [[クリック]]は、他に[[ダブルクリック]]の[[イベント]]も発生する場合があります。

[23] [[マウス]]の第2ボタン (標準では[[右ボタン]]) の[[クリック]]は、
[[文脈メニュー]]を呼び出します。

[25] [[マウス]]が指示する位置は[[マウスポインター]]で示されるのが普通です。
[[マウスポインター]]は [CODE(CSS)@en[[[cursor]]]] [[特性]]などによって制御できます。

[24] [[マウス]]によって[[マウスポインター]]が移動すると、
移動イベントが発生します。

[26] [[マウス]]によって[[文書]]中の[[文字列]]や[[画像]]などを[[ドラッグ]]することで、
[[選択]]範囲を指定できます。また、 [[DnD]] 系[[イベント]]も発生します。

[28] 編集中の[[要素]]内での[[クリック]]は、選択の解除や[[カーソル位置]]の移動を発生させることがあります。

[30] [[マウス]]の[[クリック]]や[[ドラッグ]]などの操作は、
クリック位置が[[スクロールバー]]なら[[スクロール]]操作を発生させることがあります。
[CODE(HTML)@en[[[<input type=range>]]]] や [CODE(HTML)@en[[[<input type=file>]]]]
や [CODE(HTMLe)@en[[[keygen]]]]、 [CODE(HTMLa)@en[[[controls]]]]
[[属性]]つき[[媒体要素]]などの[[要素]]内の各部分ならそれぞれの[[制御子]]の操作を発生させることがあります。

[35] [[マウス]]操作により、[[フォーカス]]が移動することがあります。

[31] [[イベントループ]]が[F[[[一時停止]]中]]は、反応を通常よりも抑制する必要があります。

[32] 各操作には、[[鍵盤]]の状態が影響することがあります。

[13] [[マウスイベント]]の一部は、 [[engagement gesture]] です。
その発生時に [[Pointer Lock]] の処理が実行されます。

[14] [[固定状態]]では、[[マウスカーソル]]の[[座標]]に基づく[[イベント]]は[[発火]]しないことになっています。

;; [[固定状態]]参照。

[43] [[固定状態]]では、 [CODE[clientX]]/[CODE[clientY]], [CODE[screenX]]/[CODE[screenY]]
は[[利用者エージェント]]の[F[元のマウスカーソル位置]]によって決定しなければ[MUST[なりません]]
[SRC[>>39]]。

** マウスカーソルの移動

[40] [CODE(DOMa)@en[movementX]]/[CODE(DOMa)@en[movementY]] は、
前の [CODE[mousemove]] [[イベント]]からの [CODE(DOMa)@en[screenX]]/[CODE(DOMa)@en[screenY]]
の[[差]]としなければ[MUST[なりません]] [SRC[>>39]]。

[44] [[固定状態]]では [CODE[screenX]]/[CODE[screenY]] は変化しませんが、
[CODE[movementX]]/[CODE[movementY]] は通常通り変化させなければ[MUST[なりません]] [SRC[>>39]]。

[45] [[マウスカーソル]]が[[窓]]から外れて改めて他の場所から入った場合など、
値が異常に大きくなる場合には、 [N[0]] に設定しなければ[MUST[なりません]] [SRC[>>39]]。

[42] [[固定状態]]が解除された時[[窓]]外に[[マウスカーソル]]があって[[マウスカーソル]]位置を受け取れず、
その後改めて[[窓]]内に入った場合、元の位置は未知であって[[差]]を計算できないということで、
値は [N[0]] としなければ[MUST[なりません]] [SRC[>>39]]。

[41] [CODE(DOMe)@en[mousemove]] 以外では、 [N[0]] のままとしなければ[MUST[なりません]]
[SRC[>>39]]。

* 合成マウスイベントを発火

[9] [DFN[[RUBYB[[[合成マウスイベントを発火]]]@en[fire a synthetic mouse event]]]]とは、
[FIG(list members middle)[
: [VAR[イベント型]] : [[イベント型]]
: [VAR[信頼しないフラグ]] : [[boolean]]
: [VAR[対象]] : [[節点]]
]FIG]
... について、次のようにすることをいいます [SRC[>>6]]。
[FIG(steps)[
= [38] [VAR[イベント]]を、 [CODE(DOMi)@en[MouseEvent]] [[イベントの作成]]の結果に設定します。
= [10] [VAR[イベント]]の各状態を次の通り設定します。
[FIG(list members)[
: [F[型][イベント型]] : [VAR[イベント型]]
: [F[bubbles]] : [[真]]
: [F[取り消し可能]] : [[真]]
: [F[合成フラグ]] : [[真]]
: [F[信頼済み]] : [VAR[信頼しないフラグ]]が設定されていれば、[[偽]]
:[15] [CODE(DOMa)@en[[[screenX]]]], [CODE(DOMa)@en[[[screenY]]]], [CODE(DOMa)@en[[[clientX]]]], [CODE(DOMa)@en[[[clientY]]]], [CODE(DOMa)@en[[[button]]]]: [CODE[[[0]]]]
:[16] [CODE(DOMa)@en[[[ctrlKey]]]], [CODE(DOMa)@en[[[shiftKey]]]], [CODE(DOMa)@en[[[altKey]]]], [CODE(DOMa)@en[[[metaKey]]]]: [[鍵盤]]の現在の状態 (該当する[[鍵]]がなければ[[偽]])
:[19] [CODE(DOMm)@en[[[getModifiedState]]]] の返す値: [[イベント]]作成時の[[鍵盤]]の状態
:[17] [CODE(DOMa)@en[[[details]]]]: [CODE[[[1]]]]
:[18] [CODE(DOMa)@en[[[relatedTarget]]]]: [CODE[[[null]]]] (特に指定のない場合)
]FIG]
= [11] [VAR[対象]]において[VAR[イベント]]を[[dispatch]]した結果を返します。
]FIG]

[12] [CODE(DOMm)@en[click]] [[メソッド]]から呼び出されます。

[20] [[[CODE(DOMe)@en[click]]イベントの発火]]は[[合成マウスイベントを発火]]を使って定義されています。
[CODE(DOMa)@en[[[isTrusted]]]] が[[偽]]となる場合や
[CODE(DOMa)@en[[[relatedTarget]]]] が設定される場合もあります。

* メンバー

[36] 
[FIG(list short)[
- [CODE(DOMa)@en[movementX]]
- [CODE(DOMa)@en[movementY]]

[HISTORY[
- [CODE(DOMa)@en[region][hit region]]
]HISTORY]
]FIG]

* 関連

[SEE[ [[Pointer Events]]、[[Touch Events]] ]]



* 歴史

[1]
[CITE[Eureka Man &#187; Blog Archive &#187; Towards multi-touch in the browser]] ([TIME[2007-02-01 22:11:16 +09:00]] 版) <http://eurekaman.com/towards-multi-touch-in-the-browser>
([[名無しさん]] [WEAK[2007-02-01 13:24:44 +00:00]])

-[2] [CITE@ja[IEにマウスカーソルの動きを追跡できる問題、マイクロソフトはリスク小と主張 - [[Engadget Japanese]]]],
2012年12月19日, 午前 06:37,
[TIME[2012-12-19 00:55:24 +09:00]] 
<http://japanese.engadget.com/2012/12/18/ie/>
--
[58] 
原文:
[CITE@en-US[Internet Explorer flaw may let ad firms track mouse input, Microsoft says that will change | Engadget]]
([TIME[2022-02-17T11:39:47.000Z]])
<https://www.engadget.com/2012-12-13-internet-explorer-flaw-reportedly-lets-ad-firms-track-mouse-input.html>


[4] [CITE[IRC logs: freenode / #whatwg / 20120324]]
( ([TIME[2012-04-07 22:06:11 +09:00]] 版))
<http://krijnhoetmer.nl/irc-logs/whatwg/20120324>

[3] [CITE[spider.io — Internet Explorer Data Leakage]]
( ([TIME[2012-12-14 01:39:41 +09:00]] 版))
<http://spider.io/blog/2012/12/internet-explorer-data-leakage/>

[5] [CITE[Javascript Madness: Mouse Events]]
([TIME[2009-07-07 10:18:22 +09:00]] 版)
<http://unixpapa.com/js/mouse.html>

[7] [CITE@en-US[CSSOM View Module]]
( ([TIME[2013-05-08 14:10:25 +09:00]] 版))
<http://dev.w3.org/csswg/cssom-view/#extensions-to-the-mouseevent-interface>

[8] [CITE@en-US-x-hixie[HTML Standard]]
( ([TIME[2013-05-05 06:42:10 +09:00]] 版))
<http://www.whatwg.org/specs/web-apps/current-work/#hit-regions>


[21] [CITE@en[Pointer Events]]
([TIME[2015-02-26 17:44:24 +09:00]] 版)
<https://dvcs.w3.org/hg/pointerevents/raw-file/tip/pointerEvents.html#dfn-compatibility-mouse-events>


[33] [CITE@en[Editorial: define Event attribute defaults through IDL · whatwg/html@0be0229]]
([TIME[2016-03-23 21:15:07 +09:00]] 版)
<https://github.com/whatwg/html/commit/0be02299f128cbb7c65a7ce259fdd838fd44a4b5>

[34] [CITE@en[Editorial: major cleanup around firing and dispatching events]]
([[annevk]]著, [TIME[2016-10-19 01:00:43 +09:00]])
<https://github.com/whatwg/html/commit/8ffbd146d4709057e45dd6cfc81e7a70897050c5>

[37] [CITE@en[Editorial: use "creating an event" more and refactor click()]]
([[annevk]]著, [TIME[2016-10-29 03:23:16 +09:00]])
<https://github.com/whatwg/html/commit/467b98781f82f6bf1a91fad435982ff27d8d9999>

[46] [CITE@en[Make synthetic mouse events composed]]
([[annevk]]著, [TIME[2017-09-04 21:11:16 +09:00]])
<https://github.com/whatwg/html/commit/8f719cd3e0643a4cfa2ffb5d9c1eefc7985d6a3c>

[47] [CITE@en[Synthetic click activation steps should state whether the event is composed or not · Issue #578 · w3c/webcomponents]]
([TIME[2017-09-09 16:17:10 +09:00]])
<https://github.com/w3c/webcomponents/issues/578>

[48] [CITE@en[Make synthetic mouse events composed by annevk · Pull Request #2999 · whatwg/html]]
([TIME[2017-09-09 16:20:36 +09:00]])
<https://github.com/whatwg/html/pull/2999>

[49] [CITE@en[Merge pull request #155 from dtapuska/gh-pages]]
([[garykac]]著, [TIME[2017-11-21 09:56:26 +09:00]])
<https://github.com/w3c/uievents/commit/40e9a8e7caa92ea10cf16ad8bb593d193553ac22>

[50] [CITE@en[Add text around dispatching mouseenter/leave/out/over when an element by dtapuska · Pull Request #155 · w3c/uievents]]
([TIME[2017-11-22 11:56:14 +09:00]])
<https://github.com/w3c/uievents/pull/155>

[51] [CITE@en[Dispatch mouseenter/leave/out/over when the layout (or scroll) changes · Issue #154 · w3c/uievents]]
([TIME[2017-11-22 11:56:57 +09:00]])
<https://github.com/w3c/uievents/issues/154>

[52] [CITE@en["create an event" doesn't work for certain UI events · Issue #414 · whatwg/dom]]
([TIME[2018-04-07 16:04:53 +09:00]])
<https://github.com/whatwg/dom/issues/414>

[53] [CITE@en[Define event constructing steps by annevk · Pull Request #614 · whatwg/dom]]
([TIME[2018-04-07 16:07:10 +09:00]])
<https://github.com/whatwg/dom/pull/614>

[54] [CITE@en[Define "event constructing steps" for complicated events · Issue #194 · w3c/uievents]]
([TIME[2018-04-07 16:07:40 +09:00]])
<https://github.com/w3c/uievents/issues/194>

[55] [CITE@en[52174 – Control-click on Mac should trigger a mouse event with event.button == 2]]
([TIME[2018-10-09 14:43:55 +09:00]])
<https://bugs.webkit.org/show_bug.cgi?id=52174>

[56] [CITE@en[276941 - Implement MouseEvent buttons attribute - chromium - Monorail]]
([TIME[2018-10-09 14:44:11 +09:00]])
<https://bugs.chromium.org/p/chromium/issues/detail?id=276941>


[57] 
[[マウス]]を動かさないけど[[スクロール]]で[[要素]]上の相対位置が変化した時[[マウスイベント]]が発生しない(こともある?)のね?
[TIME[2021-06-06T09:19:01.600Z]]


