Как в Javascript / jQuery определить, есть ли на клиентском устройстве мышь?
У меня есть сайт, на котором появляется небольшая информационная панель, когда пользователь наводит указатель мыши на элемент. Я использую jQuery.hoverIntent для обнаружения зависания, но это явно не работает на устройствах с сенсорным экраном, таких как iPhone / iPad / Android. Поэтому на этих устройствах я хотел бы вернуться к нажатию, чтобы отобразить информационную панель.
javascript
jquery
iphone
android
Брэд Робинсон
источник
источник
:hover
, вероятно, лучше (при кодировании одной таблицы стилей для нескольких устройств) использовать:hover
чисто в косметических целях.Ответы:
+1 за выполнение
hover
и то иclick
другое. Еще один способ - использовать медиа-запросы CSS и использовать некоторые стили только для небольших экранов / мобильных устройств, которые, скорее всего, будут иметь функцию касания / касания. Итак, если у вас есть определенные стили через CSS, а из jQuery вы проверяете эти элементы на предмет свойств стиля мобильного устройства, вы можете подключиться к ним, чтобы написать свой код для мобильных устройств.Смотрите здесь: http://www.forabeautifulweb.com/blog/about/hardboiled_css3_media_queries/
источник
Примечание . Тот факт, что устройство поддерживает сенсорные события, не обязательно означает, что это исключительно устройство с сенсорным экраном. Многие устройства (например, мой Asus Zenbook) поддерживают события нажатия и касания, даже если у них нет реальных механизмов сенсорного ввода. При разработке поддержки сенсорного ввода всегда включайте поддержку событий щелчка и никогда не предполагайте, что какое-либо устройство является исключительно тем или иным.
источник
'ontouchstart' in document.documentElement
неверно возвращает истину на BlackBerry 9300Найдено тестирование для window.Touch не работает на android, но это работает:
См. Статью: Как лучше всего обнаружить устройство с сенсорным экраном с помощью JavaScript?
источник
Причина использования maxTouchPoints вместе с msMaxTouchPoints:
Источник: http://ctrlq.org/code/19616-detect-touch-screen-javascript
источник
Работает везде !!
источник
isTouch = "ontouchstart" in window || navigator.msMaxTouchPoints;
Я использую:
в jQuery Mobile 1.0.1
источник
Google Chrome, похоже, возвращает ложные срабатывания по этому поводу:
Я полагаю, это как-то связано с его способностью «эмулировать сенсорные события» (F12 -> настройки в правом нижнем углу -> вкладка «переопределяет» -> последний флажок). Я знаю, что по умолчанию он выключен, но это то, с чем я связываю изменение результатов (метод «in», используемый для работы в Chrome). Однако, насколько я тестировал, это, похоже, работает:
Во всех браузерах, в которых я запускал этот код, указано, что typeof является «объектом», но я уверен, что это что угодно, но не undefined :-)
Протестировано в IE7, IE8, IE9, IE10, Chrome 23.0.1271.64, Chrome для iPad 21.0.1180.80 и iPad Safari. Было бы здорово, если бы кто-нибудь сделал еще несколько тестов и поделился результатами.
источник
Написал это для одного из моих сайтов и, вероятно, является самым надежным решением. Тем более, что даже Modernizr может получать ложные срабатывания при обнаружении касания.
Если вы используете jQuery
или просто чистый JS ...
источник
Для моего первого поста / комментария: все мы знаем, что touchstart срабатывает перед щелчком. Мы также знаем, что когда пользователь откроет вашу страницу, он или она: 1) переместит мышь 2) щелкнет 3) коснется экрана (для прокрутки или ... :))
Попробуем что-нибудь:
// -> Начало: jQuery
// <- Конец: jQuery
Хорошего дня!
источник
Я протестировал следующий код, упомянутый выше в обсуждении
работает на android Mozilla, chrome, Opera, браузер android по умолчанию и safari на iphone ... все положительно ...
мне кажется солидным :)
источник
Полезный пост в блоге по этой теме, связанный с источником Modernizr для обнаружения событий касания. Вывод: надежно обнаружить устройства с сенсорным экраном с помощью Javascript невозможно.
http://www.stucox.com/blog/you-cant-detect-a-touchscreen/
источник
Это работает для меня:
источник
Если вы используете Modernizr , он очень прост в использовании,
Modernizr.touch
как упоминалось ранее.Однако я предпочитаю использовать комбинацию
Modernizr.touch
тестирования и тестирования пользовательского агента, на всякий случай.Если вы не используете Modernizr, вы можете просто заменить
Modernizr.touch
указанную выше функцию на('ontouchstart' in document.documentElement)
Также обратите внимание, что тестирование пользовательского агента
iemobile
предоставит вам более широкий диапазон обнаруженных мобильных устройств Microsoft, чемWindows Phone
.Также см. Этот вопрос SO
источник
В jQuery Mobile вы можете просто:
Не знаю, почему это так недокументировано .. но это кроссбраузерная безопасность (последние 2 версии текущих браузеров).
источник
Как уже упоминалось, устройство может поддерживать как ввод с помощью мыши, так и сенсорный ввод. Очень часто вопрос не в том, «что поддерживается», а в том, «что используется в настоящее время».
В этом случае вы можете просто зарегистрировать события мыши (включая прослушиватель наведения) и события касания.
JavaScript должен автоматически вызывать правильный слушатель на основе ввода пользователя. Итак, в случае касания,
onTouchStartCallback
будет запущено, эмулируя ваш код наведения.Обратите внимание, что прикосновение может активировать оба типа слушателей: прикосновение и мышь. Однако слушатель касания идет первым и может предотвратить запуск последующих слушателей мыши путем вызова
event.preventDefault()
.Дополнительная информация здесь .
источник
Для разработки на iPad я использую:
Затем я могу выборочно привязаться к событиям касания (например, ontouchstart) или событиям, основанным на мыши (например, onmousedown). На андроиде еще не тестировал.
источник