[1] [[マウス]]およびそれと同等とみなされ得る[[装置]]を、
一般に[DFN[[RUBYB[指示装置]@en[pointing device]]]] といいます。


* 具体例

[14] [[指示装置]]には、
次のものがあります。

[FIG(short list)[ [13] [[指示装置]]
- [[マウス]]
- [[トラックボール]]
- [[トラックポイント]]
- [[タッチパッド]]
- [[ペンタブレット]]
- [[タッチパネル]]
- [[ジョイスティック]]
]FIG]

[2] [[OS]] の機能あるいは独自の[[アプリケーション]]として、
[[ソフトウェア]]によって[[指示装置]]をエミュレートするものもあります。

[EG[
[3] [[鍵盤]]の[[矢印]]などによって[[マウス]]操作とみなすことがあります。
]EG]

[EG[
[12] [[WebDriver]] により[[指示装置]]の挙動をエミュレートすることがあります。
]EG]

[EG[
[15] [[遠隔操作]]ソフトウェアを通じてネットワークから[[指示装置]]の挙動がもたらされる場合もあります。
]EG]

[EG[
[16] [[仮想機械]]上で動作する場合のように[[プラットフォーム]]レベルでは物理的な[[装置]]に見えても実はそうではない場合もあります。
]EG]

[10] スマートフォンの画面のように、マウス相当の機能より大幅に拡張されているものもあります。

* 操作と状態

[4] [[マウス]]を利用する[[ソフトウェア]] ([[OS]]、[[ウィンドウシステム]]、[[アプリケーション]]など) は、
[[マウス]]が指す[[画面]]上の[[座標]]を保持しています。
これを表す記号を[[マウスポインター]]または[[マウスカーソル]]といいます。

;; [6] 多くの環境では、そのような[[座標]]は同時に1つだけ存在しており、
[[画面]]全体を覆う[[二次元]] ([VAR[x]], [VAR[y]]) [[座標空間]]上の[[点]]を表しています。

;; [11] [[マルチディスプレイ]]環境では、いずれかの[[画面]]にだけ存在します。

;; [17] 
[[遠隔操作]]ソフトウェアや[[仮想機械]]ソフトウェアの[[窓]]内で別の[[画面]]上の[[マウス]]が表示される場合のように、
複数の[[画面]]を同時表示しているときは[[マウスカーソル]]が複数存在することがあります。

[5] [[マウス]]は1つ以上の[[ボタン]]を持っており、それぞれ押下することができます。
押下してすぐに離す操作を[[クリック]]、押下して[[座標]]を移動させてから離す操作を[[ドラッグ]]
([[ドラッグアンドドロップ]]) といいます。

[7] [[マウス]]は[[ホイール]]を持つことがあります。[[ホイール]]は[[ボタン]]の1つとして機能することもありますが、それに加えて、
[[一次元]]の移動量を指定する操作ができます。

[8] [[指示装置]]の操作と状態に関しては、次のような概念があります。
[FIG(short list)[
- [[クリック]]
- [[ダブルクリック]]
- [[右クリック]]
- [[ドラッグ]]
- [[ドロップ]]
- [CODE(DOMe)@en[[[mousedown]]]]
- [CODE(DOMe)@en[[[mouseup]]]]
- [[活性的に指示されている]]
- [CODE(CSS)@en[[[:hover]]]]
]FIG]

;; [9] [[マウス操作]]も参照。

[18] [[アプリケーション]]によっては、
[[マウス]]と[[鍵盤]]の操作を組み合わせることがあります。

[EG[
[19] 例えば [KEY[Shift]] を押しながら[[クリック]]すると通常とは異なるメニューを表示することがあります。
]EG]


[21] [[ThinkPad]] の[[鍵盤]] (単体製品を含みます。) では、
[[中ボタン]]を押しながら[[トラックポイント]]を移動すると[[ホイール]]の操作になります。
これは[[デバイスドライバー]]レベルの仕様とされます [要出典]。

[22] 一方で、[[中ボタン]]を押して離すと[[スクロール]]モードに入ります。
これは [[Windows]] レベルの仕様とされます [要出典]。
[[Windows]] の仕様といいつつ効くアプリケーションと効かないアプリケーションがあるので、
実はそうではなく各アプリケーションが勝手に実装している仕様なのでしょうか。
[[Chrome]] と [[Firefox]] で微妙に挙動と表示が違います。

[23] 
さて、 >>21 と >>22 は必ずしも矛盾しないものの、微妙なバランスで成り立っていそうです。
実際試してみると、 [[Firefox]] では思ったように機能します。
一方で [[Chrome]] だと[[中ボタン]]を押しているときに[[スクロール]]モードに入る準備動作 (マウスポインターが変化し、どの方向にも移動しない。ボタンを離すと[[スクロール]]モードに入る。) 
になるときと、[[ホイール]]になるときがあります。どちらかというと準備動作の方に入ることが多い体感ですが、
どちらに行くかの条件は何かありそうでつかめません。
[TIME[2025-05-04T15:22:39.800Z]]

[24] 
その [[Chrome]] でも[[中ボタン]]の [CODE[mousedown]] で[[既定動作]]を[[取り消し]]すれば常に[[ホイール]]モードに入るように見えます (が厳密にチェックはしていません)。

[25] [[Firefox]] だとその準備動作モードで固定されることがなくて、準備動作状態で[[トラックポイント]]を移動するとそのまま[[ホイール]]モードに移行するので、
自然な挙動になっています。

* メモ

[20] [CITE@en[Mouse back/forward buttons: page navigation or JS events? · Issue #191 · w3c/pointerevents]]
([TIME[2018-10-17 13:07:00 +09:00]])
<https://github.com/w3c/pointerevents/issues/191>