Я пишу веб-сайт, предназначенный для использования как на рабочих столах, так и на планшетах. Когда он посещается с рабочего стола, я хочу, чтобы экраны с интерактивными экранами загорались с эффектами :hover
(разные цвета фона и т.д.). С планшетом нет мыши, поэтому я не хочу никаких эффектов зависания.
Проблема в том, что когда я нажимаю что-то на планшете, у браузера, очевидно, есть какой-то "невидимый курсор мыши", который он перемещает в выбранное мной место, а затем оставляет его там - так что вещь, которую я только что нажал, с эффектом наведения, пока я не коснусь чего-то другого.
Как я могу получить эффекты зависания, когда я использую мышь, но подавляйте их, когда я использую сенсорный экран?
В случае, если кто-то думает о том, чтобы предложить его, я не хочу использовать нюанс агента пользователя. На одном и том же устройстве может быть как сенсорный экран, так и мышь (может быть, сегодня это не так часто, но гораздо больше в будущем). Меня не интересует устройство, меня интересует, как он используется в настоящее время: мышь или сенсорный экран.
Я уже пробовал подключать события touchstart
, touchmove
и touchend
и вызывать preventDefault()
для всех из них, что иногда блокирует "невидимый указатель мыши"; но если я нажимаю быстро назад и вперед между двумя разными элементами, то после нескольких кранов он начнет перемещать "курсор мыши" и в любом случае осветить эффекты зависания - он, как и мой preventDefault
, не всегда соблюдается. Я не буду утомлять вас подробностями, если только не понадобятся - я даже не уверен, что правильный подход займет; если у кого-то есть более простое исправление, я все уши.
Изменить:. Это можно воспроизвести с помощью стандартного CSS :hover
с болотным стандартом, но здесь быстрый просмотр для справки.
<style>
.box { border: 1px solid black; width: 150px; height: 150px; }
.box:hover { background: blue; }
</style>
<div class="box"></div>
<div class="box"></div>
Если вы нажмете на любой из ящиков, он получит синий фон, который я хочу. Но если вы нажмете на любой из ящиков, он также получит синий фон, который я пытаюсь предотвратить.
Я также разместил здесь образец , который делает это, а также перехватывает события мыши jQuery. Вы можете использовать его, чтобы увидеть, что события крана также срабатывают mouseenter
, mousemove
и mouseleave
.