Какое условие позволяет touchstart
+ touchend
стать событием click
с использованием ванильного JS и отсутствия сенсорной среды?
Есть ли официальная спецификация, например:
touchstart followed by touchend, with delta_time < 100 ms => triggers a "click" event
?
Если да, следуют ли этому стандарту Chrome и Firefox?
Пример: если вы нажмете touchstart
, удержите палец нажатым в течение 2 секунд, а затем отпустите палец (touchend
), это не вызовет click
.
document.querySelector("div").addEventListener("touchstart", evt => { console.info("touchstart"); }, {passive: true});
document.querySelector("div").addEventListener("touchend", evt => { console.info("touchend"); }, {passive: true});
document.querySelector("div").addEventListener("click", evt => { console.info("click"); }, {passive: true});
<div>Hello<br>Hello<br>Hello</div>
@somethinghere Думаю, ты можешь опубликовать это как ответ. Есть ли у вас источник этой информации, на который вы можете дать ссылку? Тот факт, что продолжительность touchstart/touchend может варьироваться от одного пользователя к другому, а также аспект снятия отпечатков пальцев.
Честно говоря, у меня нет ничего, что могло бы подтвердить это, это просто то, что я заметил после того, как сталкивался с этим в течение многих лет, сам моделируя событие щелчка. Я никогда не находил способа позволить системе сообщать мне время щелчка, поэтому я предполагаю, что это для снятия отпечатков пальцев - как и большинство настроек, специфичных для системы. Поэтому я не собираюсь публиковать это как ответ из-за этого. Из своего опыта в области доступности я просто знаю, что это можно настроить. Однако MDN упоминает об этом: Developer.mozilla.org/en-US/docs/Web/API/Element/…
@somethinghere Я все еще думаю, что это будет хороший ответ, лучше, чем текущие ответы (если вы упомянете, что это гипотеза, ничего страшного!)
Я попробовал, но если кто-то придет с более глубокими знаниями, я был бы рад услышать их мнение и отдать им должное;) С уважением
Вот документация. Событие click
регистрируется после завершения touchstart
, за которым следует touchend
. Для клика нет ограничений по времени. Вот структура: touchstart followed by touchend => triggers a "click" event
.
Нет, если вы нажмете touchstart
, удержите палец нажатым в течение 2 секунд, а затем отпустите палец (touchend
), это не вызовет click
. Ваш ответ не точен.
Реальной разницы во времени, о которой вы могли бы знать, не существует, поскольку она может меняться от устройства ввода к устройству ввода и от системы к системе. В режиме доступности некоторым людям с более медленной моторикой, возможно, придется увеличить эту дельту, чтобы их взаимодействие считалось щелчком. Вы можете увидеть это упомянутое в документации MDN в Примечаниях по использованию и в спецификации имеется ссылка на (термин, который я никогда раньше не встречал, но вы что-то узнаете каждый день): гистерезис.
В спецификации сказано, что пока они попадают в один и тот же гистерезис, это следует считать щелчком, но интервал между двумя событиями определяется системой и, насколько мне известно, не отображается через браузер. Я предполагаю, что это сделано для предотвращения снятия отпечатков пальцев в браузерах, хотя я думаю, что это было бы полезно, если вы хотите иметь возможность самостоятельно имитировать события щелчка (что, как я быстро прочитал, в спецификации фактически не поощряется).
Поскольку большинство людей не переключают устройства указателя на лету, возможно, лучший способ узнать, какое событие указателя, вероятно, использовалось, — это просто сопоставить его с CSS: window.matchMedia('(pointer:coarse)').matches
должно сказать вам, было ли это событие касания или мыши?
document.addEventListener( 'click', event => {
event.preventDefault();
if ( window.matchMedia( 'pointer:coarse' ).matches ){
console.info( 'Probably a touch event click' );
} else {
console.info( 'Probably a mouse event click' );
}
})
Это связано с тем, что система определяет интервал, необходимый для того, чтобы взаимодействие считалось кликом, и не раскрывает этот интервал браузеру, чтобы предотвратить снятие отпечатков пальцев. Это связано с тем, что доступность требует от некоторых людей с менее быстрой моторикой настройки этих настроек. Поэтому нет, на самом деле вы не можете легко отличить. Хитрость заключается в том, чтобы отменить события в сенсорной системе, чтобы они не превращались в щелчки, предотвращая поведение браузера по умолчанию.