Я создаю простое мобильное приложение с Cordova. Для хорошего пользовательского опыта я хотел бы иметь мгновенную обратную связь всякий раз, когда пользователь нажимает кнопку. Это должно быть выполнено с помощью псевдокласса :active
. В основном это работает, но не совсем «мгновенно».
См. jsbin здесь.
- В десктопном Chrome нажатие на кнопку производит абсолютно мгновенную обратную связь, без вопросов.
- В Chrome для Android быстрое нажатие кнопки кажется довольно быстрым, но медленное нажатие или удержание кнопки вызывает задержку (это может быть трудно заметить, но оно есть, и это меня беспокоит).
Я думаю, что это как-то связано с прокруткой. Если вы зайдете в настройки Android, там будет прокручивающийся список опций. Эти параметры, кажется, выделяются с аналогичной задержкой. Однако любые встроенные кнопки Android, которые не находятся в списке прокрутки, работают абсолютно мгновенно (например, кнопка «Назад» в правом верхнем углу или «Сохранить/отменить» во всплывающем диалоговом окне).
Есть ли способ убедить Chrome, что эти кнопки не находятся ни на какой панели прокрутки и должны быть просто выделены мгновенно?
Это, вероятно, не связано, но я также заметил, что удерживание кнопки html выделяет ее, но затем перемещение пальца (все еще внутри кнопки) приводит к исчезновению выделения. Это не соответствует поведению нативных кнопок Android, которые остаются подсвеченными, пока вы остаетесь внутри кнопки.
Изменить: я должен добавить, что -webkit-tap-highlight-color
(который работает только с cursor: pointer
) немного быстрее, чем :active
, но это неприемлемое решение по нескольким причинам:
- Выделение исчезает, если вы удерживаете кнопку более одной секунды
- Это конфликтует с
:active
- чтобы получить разумные результаты с-webkit-tap-highlight-color
, вам нужно удалить:active
, что не имеет смысла. - Невозможно контролировать размер/форму выделения, которое может не соответствовать фактической кнопке (иногда она кровоточит по краю или имеет несоответствующие закругленные углы).
Правильный HTML-способ решения этой проблемы — :active
, и я хотел бы использовать его, если это вообще возможно.