Я пишу веб-сайт, призначений для використання як з настільних ПК, так і з планшетів. Коли його відвідують з робочого столу, я хочу, щоб місця, на які можна натиснути, загорілися :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
.