Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Pointerleave причина срабатывания (https://javascript.ru/forum/misc/81664-pointerleave-prichina-srabatyvaniya.html)

Biotoxsin 08.01.2021 21:17

Pointerleave причина срабатывания
 
Здравствуйте!

Во время перемещения в версии с тачпадом хотел отслеживать pointermove, но событие move прерывается после 5-9 вызовов и вызывается событие leave. Не могу понять почему так? Может кто-то подсказать.

Если нужен код:
<!DOCTYPE html>
<html lang="ru">
  <head>
    <meta charset="utf-8">
    <title>Test</title>
    <script type="text/javascript" src="jquery.min.js"></script>
  </head>
  <body style="height: 100vh; width: 100vw; background: #000">
    <script type="text/javascript">
      $('body').on('pointerleave', (e) => {
        console.log('leave');
      })
      $('body').on('pointermove', (e) => {
        console.log('move');
      })
    </script>
  </body>
</html>

рони 08.01.2021 21:33

Biotoxsin,
может прокрутка

Biotoxsin 08.01.2021 21:45

Цитата:

Сообщение от рони (Сообщение 532440)
Biotoxsin,
может прокрутка

Нет. Меняем размер на 95, убирая тем самым прокрутку. И всё по прежнему.

voraa 09.01.2021 00:32

Цитата:

Сообщение от Biotoxsin
Во время перемещения в версии с тачпадом

С тачпадом или, все-таки, с тачскрином?
С тачскрином такое происходит, т.к. вначале перед pointerleave возникает событие pointercancel.
Это стандартная последовательность событий pointercancel - pointerleave перед тем, как браузер прекращает пользовательскую обработку движений по тачскрин.
А событие pointercancel возникает, потому, что браузер берет на себя обработку движений пальцев, думая, что это какие то стандартные жесты, например, скроллинг или зумирование.
Что бы он так не думал, нужно использовать стиль touch-action
https://developer.mozilla.org/ru/doc...S/touch-action

Попробуйте так
<!DOCTYPE html>
<html lang="ru">
  <head>
    <meta charset="utf-8">
    <title>Test</title>
    <script type="text/javascript" src="jquery.min.js"></script>
  </head>
  <body style="height: 100vh; width: 100vw; background: #000; touch-action: none;">
    <script type="text/javascript">
      $('body').on('pointerleave', (e) => {
        console.log('leave');
      })
      $('body').on('pointermove', (e) => {
        console.log('move');
      })
    </script>
  </body>
</html>


Часовой пояс GMT +3, время: 08:28.