最近のiPadにはユニバーサルコントロールという機能があって、Macのマウスとキーボードで直接操作できる。
これがあればモバイルデバイスのデバッグも楽そう!と思って、iPadを机に置いて使っている。
デバイスを持ち替えたたり、モバイルデバイスのキーボードでポチポチ入力したりする手間が減って、かなり便利なのだけど、たまに、スワイプが反応しなかったり、ところどころ、思ったように操作できない場面がある。
ひょっとしてマウス触るとタッチイベントが発生していないのかな、と思って、発生したmouseイベントやtouchイベントをひたすら表示するページを作って眺めてみた。
chalk-troubled-drill.glitch.me
すると、結果は以下のようで、開発用のシミュレータみたいにmouseイベントをtouchイベントに変換して送ってくれるわけではないようだった。
- MacのGoogle Chrome
- mouse関連のイベントが発生する
- devtoolでMobileデバイスのシミュレーションをすると、touchイベントが発生する
- iOS Simulator上のSafari
- マウスで操作しても、touchイベントが発生する
- 追記:Capture Pointerの機能があって、これを使うとmousemoveになるらしい
- ユニバーサルコントロール越しのiPadのSafari / Google Chrome
- マウスで操作するとmouseイベント
- 画面を直接触るとtouchイベント
ユニバーサルコントロールは開発用のシミュレータではないので、当たり前といえば当たり前ではある。
touchmoveは指で画面を触ってる間に発生するけど、mousemoveは常に発生する、という違いがあって、自力でイベントをハンドリングする機会があれば、お絵かきツールを作るときみたいに、mousedownしている間だけmousemoveをハンドリングするなど、丁寧に処理すれば同じ体験を提供できそう。