JavaScriptでタッチデバイスを検出する方法
JavaScriptでタッチ機能を検出する信頼性の高いテクニック。navigator.maxTouchPoints、ontouchstart、PointerEvent API、User-Agentスニッフィングが信頼できない理由を解説します。
Touch & Input
詳細な説明
タッチ機能の検出
デバイスがタッチ入力をサポートしているかの検出はUIインタラクションの適応に重要ですが、単純なブーリアンチェック以上に複雑です。
推奨アプローチ
function isTouchDevice() {
return (
'ontouchstart' in window ||
navigator.maxTouchPoints > 0
);
}
各チェックの説明
navigator.maxTouchPoints: 同時タッチポイントの最大数を返します。0はタッチ非対応を意味します。最も信頼性の高い単一チェックです。
'ontouchstart' in window: ブラウザがタッチイベントを公開しているかをチェックします。
ハイブリッドデバイスの問題
タッチスクリーン付きノートPCはマウスとタッチの両方を持っています。タッチを一度検出するのではなく、両方をサポートするUIを設計しましょう。
ベストプラクティス
- JavaScript検出よりCSSメディアクエリ(
pointer、hover)を優先する - タッチ=モバイル、非タッチ=デスクトップと想定しない
- タッチサポートに関係なくキーボードアクセシビリティを常に提供する
- 統一入力処理にPointerEvent APIを使用する
ユースケース
インタラクティブアプリケーション(マップ、描画ツール、ゲーム)を構築するWeb開発者は、正しいイベントリスナーを登録しインタラクションパターンを調整するためにタッチ機能を検出する必要があります。