タッチスクリーンであるかを JavaScript で判定する
タッチスクリーン有無判定
// タッチスクリーン有無判定
const isTouchDevice = function() {
return 'ontouchstart' in window;
};
console.log('touch screen:', isTouchDevice());
理屈
タッチスクリーンがある場合、window.ontouchstart
はnull
で初期化されます。
タッチスクリーンがない場合、window.ontouchstart
は初期化されていません。
別解
navigator.maxTouchPoints
navigator.maxTouchPoints
は、同時タッチ点数の最大数を取得します。
if (navigator.maxTouchPoints > 0) {
// タッチ対応
}
if (navigator.maxTouchPoints > 1) {
// マルチタッチ対応
}
※navigator.msMaxTouchPoints
が存在します。
ただし、 IE11 で navigator.maxTouchPoints
に対応しているため、考慮不要です。
pointer: coarse
CSS のメディアクエリです。ポインティングデバイスの正確性を判定できます。
正確性が高い(ponter: fine
)場合、ポインティングデバイスは、マウスである可能性が高くなります。
正確性が限定されている(ponter: coarse
)場合、ポインティングデバイスは、タッチスクリーンである可能性が高くなります。
CSS@media (pointer: coarse) {
/* 正確性が限定されている */
}
JavaScriptif (window.matchMedia('(pointer: coarse)').matches) {
// 正確性が限定されている
}
'orientation' in window
画面の向きを取得します。画面の向きがあるのは、モバイル端末といって差し支えないため、タッチスクリーンである可能性が高くなります。
if ('orientation' in window) {
// 画面の向きがある
}
補足
マウス有無判定
モバイル環境でもマウス系のリスナーが null
で初期化されているため、'onmousedown' in window
で判定しても、マウス有無の判定には使えません。