Webサイトをタッチ操作に対応させようとしたところ、非常に苦労したため、得られた成果をまとめておこうと思います。
目指すゴールは手持ちのデバイスでドラッグ・スライドを実現することです。Webでは変化が目まぐるしいのでこの記事が対象とする現時点での環境を挙げておきます。
- SurfacePro / Windows 10 / mouse, touch, pen
- Internet Explorer 11
- Edge 14
- Chrome 56
- Firefox 51
- MacBook Air / OS X / mouse
- Safari
- Chrome 56
- iPhone SE / iOS 10.2 / touch
- Safari
- Xperia / Android 4.1.2 / touch, mouse
- Chrome
- Firefox
- Fire HD 8 / Fire OS 5.3.2.1 / touch, mouse
- Chrome
- Firefox
- Pointer Eventsに対応ならPointer Eventsのみ
- Pointer Eventsに未対応でTouch Eventsに対応ならTouch EventsとMouse Eventsの両方
- Pointer EventsとTouch Eventsに未対応ならMouse Eventsのみ
タッチ操作の場合、ページのスクロールなどブラウザー側の処理と競合します。この問題についてはtouch-actionというCSSプロパティが用意されています。対応状況としてはIE11 / Edge / Chromeが対応、Firefoxが次バージョンで対応、Safariが一部のみ対応ということで、これとは別の対策も必要です。実のところSafariではpreventDefault()メソッドを使って抑止することになっています。
ブラウザー側の処理にはこれ以外もあり、Pointer EventsやTouch Eventsが処理されなかった場合は互換のためにMouse Eventsが呼ばれることになっています。これらについてもpreventDefault()メソッドで抑止できることになっています。
