要約

  • 2012年12月のW3C初公開草案は、マウス、ペン、タッチを扱うための機器に依存しないイベント群を提案し、従来のマウス向けページとの互換性も扱った。
  • 2015年2月の勧告はpointerType、タッチ操作を示すtouch-action、要素の外へ動いてもドラッグを追うポインターキャプチャを定めた。

マウスが店の常連だった頃、メニューやスライダーはクリックとカーソル移動だけで話が通じた。指が来ると、古いページのためにブラウザーはマウスイベントという仮装を用意することがあった。助かる場面は多いが、そのイベントを受け取ったコードからは、本当の来客が指なのかマウスなのか見えにくい。そこへペンまで現れた。受付を増やすだけでは店が回らない。

2012年12月11日のW3C初公開作業草案は、入力機器ごとに処理を書き分ける負担を説明した。マウスのために作ったサイトがタッチとペンにも応じようとすると、似た動作のコードが重なる。互換マウスイベントは助けになる一方、入力の正体を曖昧にする。そこで草案は、画面の座標を指す接触を「ポインター」として扱う共通の入口を提案した。

共通の入口は、手の違いを消すためのものではない。PointerEventにはpointerTypeのほか、圧力、接触面の大きさ、傾きなどの情報を載せられる。記事のボタンなら「押された」で十分だろう。絵を描く道具なら、ペンがどれほど強く傾いて押されたかが線を変える。共通の動作を先に書き、必要な場面だけ道具の情報を使える。

2015年2月24日のW3C勧告にはpointerdown、pointermove、pointerup、pointercancelなどが並ぶ。領域への出入りを知らせるイベントもある。名前はマウスイベントに近く、既存の作者にもなじみやすい。ポインターの識別子は、複数の指が同時に触れたときにもそれぞれの動きを追う助けになる。

古いページの席も残された。勧告は、ポインター入力から互換用のマウスイベントを生む仕組みを記述する。ただ、そのマウスイベントは指の影かもしれない。新しいページが機器の種類を必要とするなら、pointerTypeを見ればよい。入店のたびに付けた付けひげで客の素顔を推理する必要はなくなった。

指を動かす場面では、サイトとブラウザーの仕事がぶつかる。カードをドラッグしたいのか、ページをスクロールしたいのか。ブラウザーが毎回スクリプトの取り消しを待ってからスクロールを決めれば、指先の動きは鈍くなる。touch-actionは、その場所で認める既定のタッチ操作を事前に示す。ブラウザーはスクロールについて自分の判断を早く進められる。

ドラッグには別の事故もある。小さなつまみを握ったまま、指がその枠から少しはみ出す。ポインターキャプチャを使えば、操作中の要素は境界の外へ出たポインターのイベントも受け続けられる。2015年の文書は取得と解放、gotpointercaptureとlostpointercaptureを説明する。少し曲がった軌道を走っただけで操作が消えるのは、利用者には不可解だからだ。

マウス、指、ペンは同じ道具にはならない。指には接触面、ペンには傾きと圧力、マウスにはボタンがある。Pointer Eventsは共通部分の重複を減らし、違いを必要な作業で使えるようにした。入口の札は同じでも、絵筆をマウスの形に削る必要はない。

W3CのPointer Events 1公開履歴は、2012年の初公開草案と2015年の勧告を記録する。ウェブがマウスだけを想定していられなくなった時期に、既存のページを助けながら新しい入力へ進むための文書だった。

読者には規格の名前より、ボタンが押せること、ページが気持ちよくスクロールすること、ドラッグが端で途切れないことが大切だ。マウスの常連席は残った。店の看板だけが、少し大きくなった。