Я только что столкнулся с этой проблемой, как 2 часа go. Я не знаком с ioni c, но, надеюсь, это поможет.
Создайте переменную, которая отслеживает, есть ли у вашего всплывающего окна обработчик событий, уже прикрепленный к нему. Затем вы можете добавить прослушиватель событий на карту, чтобы прослушать всплывающее окно, открываемое с помощью map.on('popupopen', function(){})
. Когда это происходит, содержимое DOM во всплывающем окне отображается и доступно для захвата с помощью querySelector
или getElementById
. Таким образом, вы можете настроить таргетинг на него и добавить к нему прослушиватель событий. Вам также нужно будет создать событие для map.on('popupclose', () => {})
, и внутри него удалить прослушиватель событий из узла dom, к которому вы его подключили.
Это необходимо сделать для каждого уникального всплывающего окна. Вы создаете контент, к которому хотите добавить прослушиватель событий. Но, возможно, вы можете создать функцию, которая сделает это за вас. Вот пример:
const someMarker = L.marker(map.getCenter()).bindPopup(`
<h4 class="norwayLink">To Norway!</h4>
`)
someMarker.addTo(map)
function flyToNorway(){
map.flyTo([
47.57652571374621,
-27.333984375
],3,{animate: true, duration: 5})
someMarker.closePopup()
}
let eventHandlerAssigned = false
map.on('popupopen', function(){
if (!eventHandlerAssigned && document.querySelector('.norwayLink')){
const link = document.querySelector('.norwayLink')
link.addEventListener('click', flyToNorway)
eventHandlerAssigned = true
}
})
map.on('popupclose', function(){
document.querySelector('.norwayLink').removeEventListener('click', flyToNorway)
eventHandlerAssigned = false
})
Вот как я нацелился на всплывающее содержимое и добавил ссылку на него в демоверсии для моего плагина .