Вы пробовали использовать эту функцию?(Это то же самое, что использовал Modernizr.)
function is_touch_device() {
try {
document.createEvent("TouchEvent");
return true;
} catch (e) {
return false;
}
}
ОБНОВЛЕНИЕ 1
document.createEvent("TouchEvent")
начали возвращать true
в последнем Chrome (ст. 17).Modernizr обновил это некоторое время назад. Проверьте тест Modernizr здесь .
Обновите вашу функцию, чтобы она работала:
function is_touch_device() {
return 'ontouchstart' in window;
}
ОБНОВЛЕНИЕ 2
Я обнаружил, что вышеупомянутое не работает на IE10 (возвращая false на MS Surface).Вот исправление:
function is_touch_device() {
return 'ontouchstart' in window // works on most browsers
|| 'onmsgesturechange' in window; // works on IE10 with some false positives
};
UPDATE 3
'onmsgesturechange' in window
вернет true в некоторых версиях IE для настольных компьютеров, так что это ненадежно.Это работает немного более надежно:
function is_touch_device() {
return 'ontouchstart' in window // works on most browsers
|| navigator.maxTouchPoints; // works on IE10/11 and Surface
};
ОБНОВЛЕНИЕ 2018
Время идет, и есть новые и лучшие способы проверить это.Я в основном извлек и упростил способ проверки Modernizr:
function is_touch_device() {
var prefixes = ' -webkit- -moz- -o- -ms- '.split(' ');
var mq = function(query) {
return window.matchMedia(query).matches;
}
if (('ontouchstart' in window) || window.DocumentTouch && document instanceof DocumentTouch) {
return true;
}
// include the 'heartz' as a way to have a non matching MQ to help terminate the join
// https://git.io/vznFH
var query = ['(', prefixes.join('touch-enabled),('), 'heartz', ')'].join('');
return mq(query);
}
Здесь они используют нестандартную функцию touch-enabled
медиазапросов, что я считаю довольно странной и плохой практикой.Но эй, в реальном мире, я думаю, это работает.В будущем (когда они поддерживаются всеми) эти функции медиазапроса могут дать вам те же результаты: pointer
и hover
.
Ознакомьтесь с источником того, как Modernizr делает это .
Хорошую статью, в которой объясняются проблемы с распознаванием касаний, см. В Stu Cox: сенсорный экран не обнаруживается .