Не видя, как вы вызываете метод createPopUp
в контексте вашего приложения, трудно точно определить, что происходит не так. Я не уверен, почему каждый раз при перемещении карты создается новое всплывающее окно, поэтому похоже, что вы вызываете этот метод в событии Map#on('move')
. При этом я предполагаю, что вы перебираете все свои функции и вызываете метод createPopUp
для каждой из них, чтобы инициализировать все всплывающие окна.
Вместо того, чтобы использовать массив узлов DOM, сгенерированных с помощью var popUps = document.getElementsByClassName('mapboxgl-popup');
, я бы рекомендовал указывать уникальное и воспроизводимое имя класса для каждого элемента всплывающего окна при инициализации. Похоже, что каждая из ваших функций имеет свойство dev_id
, поэтому вы можете сделать что-то вроде:
var popup = new mapboxgl.Popup({closeOnClick: false, className: `mapbox-gl-popup-${dev_id}`})
Если вам нужно изменить всплывающее окно для определенной функции в будущем, вы можете создать помощника функция для извлечения соответствующего узла DOM:
function retrievePopUp(feature) {
return document.getElementsByClassName(`mapboxgl-popup-${feature.properties.dev_id}`);
}