На сенсорных устройствах наблюдается странное поведение касательно зоны контакта, если вы переключаете высоту элемента, расположенного выше. Если вы запустите следующий фрагмент (например, сохраните его локально и используйте хром для эмуляции событий касания), вы заметите, что хеш #mylink
добавлен в URL-адрес, в некоторых случаях вы не нажимали на область красной ссылки. И иногда вы щелкали по красной области, ее не добавляли.Неверная область щелчка из-за переключения класса/изменения высоты при событии касания
E.g.
- Если вы нажмете верхнюю зону серого (первые 200 пикселей), серая область переключит высоту. => Хорошо.
- Если вы нажмете увеличенную, более низкую серость (200px - 400px), то добавьте в URL-адрес
#mylink
, как если бы вы нажали на область красной ссылки. => Почему? - Если вы нажмете верхнюю красную область (сначала 200px, сведенная серая область),
#mylink
не добавляется к URL. => Почему? - Если вы нажмете нижнюю красную область (последние 200 пикселей, увеличен серый участок),
#mylink
не добавлен к URL. => Почему?
<html>
<head>
\t <style type="text/css">
\t \t .test {
\t \t \t background: grey;
\t \t \t height: 200px;
\t \t }
\t \t .test.is-visible {
\t \t \t height: 400px;
\t \t }
\t \t .link {
\t \t \t height: 600px;
\t \t \t display: block;
\t \t \t background: red;
\t \t }
\t </style>
\t <script type="text/javascript">
\t (function() {
\t window.addEventListener('touchstart' , function() {
\t \t document.getElementsByClassName("test")[0].classList.toggle('is-visible');
\t }); \t
\t \t })();
\t </script>
</head>
<body>
\t <div class="test">
\t \t Click the grey area. Element enhances and minimizes itself. Now click on the lower half of the enhanced grey area (if grey = enhanced) or on the white area up to 200px below of the red area (if grey = minimized). #mylink is added to the url as if you had clicked on the red area. Why?
\t </div>
\t <a href="#mylink" class="link">The red area is the "normal" click area.</a>
</body>
</html>
Я попробовал это на IOS, Android и эмулировать события касания как в Chrome и Firefox. Они все ведут себя одинаково.
Если я слушаю click
вместо touchstart
или touchend
событие, оно работает должным образом.
В чем причина этого несоответствия? Почему область ссылок отличается/неуместна, если я слушаю события касания вместо события click?
Благодарим вас за подробное описание деятельности. Я не уверен, что это окончательное объяснение этого поведения, поскольку происходит то же самое, если я слушаю «touchhend» или «touchstart». Если я правильно вас пойму, это будет означать, что если я выполню переключение только на коснуться, это не должно произойти, правильно? Но это ... – chaenu
Также, если мы предположим, что для 'touchhend' порядок события тот же (сначала переключить, затем вызвать ссылку). Почему это отличается от события 'click', где кажется, что порядок отличается (сначала запускается ссылка, затем переключается)? – chaenu