Можно определить, только если браузер поддерживает сенсорный . Нет никакого способа узнать, действительно ли к нему подключен сенсорный экран или мышь.
Приоритет использования можно определить, прослушивая событие касания вместо события мыши, если обнаружена возможность касания.
Чтобы обнаружить сенсорный кросс-браузер:
function hasTouch() {
return (('ontouchstart' in window) || // html5 browsers
(navigator.maxTouchPoints > 0) || // future IE
(navigator.msMaxTouchPoints > 0)); // current IE10
}
Тогда можно использовать это, чтобы проверить:
if (!hasTouch()) alert('Sorry, need touch!);
или выберите событие для прослушивания:
var eventName = hasTouch() ? 'touchend' : 'click';
someElement.addEventListener(eventName , handlerFunction, false);
или используйте отдельные подходы для касания и не касания:
if (hasTouch() === true) {
someElement.addEventListener('touchend' , touchHandler, false);
} else {
someElement.addEventListener('click' , mouseHandler, false);
}
function touchHandler(e) {
/// stop event somehow
e.stopPropagation();
e.preventDefault();
window.event.cancelBubble = true;
// ...
return false; // :-)
}
function mouseHandler(e) {
// sorry, touch only - or - do something useful and non-restrictive for user
}
Для мыши можно только определить, используется ли мышь, а не существует она или нет. Можно установить глобальный флаг, чтобы указать, что мышь была обнаружена при использовании (аналогично существующему ответу, но немного упрощенному):
var hasMouse = false;
window.onmousemove = function() {
hasMouse = true;
}
(нельзя включать mouseup
или mousedown
, так как эти события также могут быть вызваны касанием)
Браузеры ограничивают доступ к низкоуровневым системным API-интерфейсам, необходимым для обнаружения таких функций, как аппаратные возможности системы, в которой они используются.
Существует возможность, возможно, написать плагин / расширение для доступа к ним, но через JavaScript и DOM такое обнаружение ограничено для этой цели, и нужно будет написать плагин, специфичный для различных платформ ОС.
Итак, в заключение: такое обнаружение может быть оценено только по «хорошей догадке».