Событие Leaflet JS zoomend не срабатывает при слишком большом уменьшении - PullRequest
0 голосов
/ 25 июня 2019

Я инициализирую карту с уровнем увеличения 15:

map.setView(latlng, 15)

в какой-то момент позже, когда пользователь взаимодействует с кнопкой, которая вызывает эту функцию:

const zoomInAndTrigger = () => {
  map.setView(latlng, 18)

  map.once("zoomend", () => {
    // some triggers fired
  })
}

zoomInAndTrigger() // on button click

это работает отличнохорошо.Ну, если пользователь не уменьшит карту больше, чем начальный 15 масштабный уровень, прежде чем он вызовет zoomInAndTrigger, то 'zoomend' вообще не сработает.

Я не знаю почему.

Ответы [ 2 ]

1 голос
/ 26 июня 2019

При масштабировании с уровня, например, с 14 на 18, анимация масштабирования не воспроизводится по умолчанию - значение по умолчанию для zoomAnimationThreshold карты равно 4, а цитирование из ссылки на брошюру :

Не будет анимировать масштабирование, если разница масштабирования превышает это значение.

Затем все взаимодействие с масштабированием выполняется мгновенно, до того, как будет выполнена ваша строка map.once("zoomend", ....

КакОсновное правило: вы должны всегда прикреплять обработчики событий до и запускать код, который запускает это событие, независимо от того, наблюдали ли вы событие, происходящее некоторое время спустя.Он защитит вас от некоторых условий гонки .

С другой стороны, вы можете передать набор вариантов увеличения / панорамирования в setZoom звонок;animate параметр увеличения может принудительно включать или отключать масштабирование для любой операции масштабирования.

0 голосов
/ 26 июня 2019

Возможно, вам просто нужно подключить слушатель событий "zoomend" до запуска карты setView.

По умолчанию, когда разрыв уровней масштабирования слишком велик или новая позиция слишком великадалеко, Leaflet setView будет мгновенно сбрасывать представление вместо того, чтобы анимировать изменение представления.Затем ваш слушатель подключается после представление уже изменилось, и оно не запускается.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...