Не имея ни мыши, ни указателя, концепция наведения экранных элементов не совсем применима для сенсорных устройств. Поскольку многие веб-сайты полагаются на навигационные события JavaScript hover или другие цели, некоторые сенсорные устройства1 реализуют mouseenter
, который срабатывает при одном касании. Если обработчик события также привязан к click
, он будет вызван только при втором касании элемента.
Поскольку функция jQuery hover()
внутренне использует mouseenter
и mouseleave
, элементы с обеими регистрациями hover()
и click()
требуют двух касаний для срабатывания последней2. Для многих случаев использования это именно то, чего вы хотите. Однако в приложениях, где обработка hover()
только добавляет акцент (всплывающая подсказка, свечение и т.д.) к наведенному элементу, возможно, имеет смысл пропустить это событие на сенсорных устройствах, перейдя сразу к обработчику onclick
.
Я знаю, как специально прослушивать события touchstart
и touchend
, что позволит мне адаптировать работу с сенсорными устройствами. Это правильное решение моей проблемы, но я надеюсь, что существует более простой способ ее решения. Я представляю себе метод, похожий по своей сигнатуре на hover()
, только реализованный таким образом, что на несенсорных устройствах подключаются только предусмотренные обработчики событий.
Есть ли в jQuery такой метод? Какие-нибудь плагины? Или я что-то упускаю из виду?
1 Поведение подтверждено на iPad, iPhone и нескольких телефонах Android.
2 Запустите эту демонстрацию JsFiddle на настольном компьютере и сенсорном устройстве, чтобы увидеть, о чем я говорю.