.zoom за пределы карты, добавить общую обёртку с относительным позиционированием:<div class="map-wrapper">
<div class="zoom">
<div data-zoom="+1" class="zoom-in"></div>
<div data-zoom="-1" class="zoom-out"></div>
</div>
<div class="map"></div>
</div>.map-wrapper {
position: relative;
}.zoom отображался поверх карты, задать ему z-index и абсолютное позиционирование:.zoom {
position: absolute;
z-index: 666;
}document.querySelector('.zoom').addEventListener('click', function(e) {
const zoomChange = +e.target.dataset.zoom;
if (zoomChange) {
map.setZoom(map.getZoom() + zoomChange);
}
});
DG.then.
methods: {
onPopupOpen(e) {
e.target
.getPopup()
.getElement()
.querySelector('.leaflet-popup-content-wrapper')
.addEventListener('dblclick', this.onPopupDblClick);
},
onPopupDblClick(e) {
const
id = +e.currentTarget.querySelector('[data-id]').dataset.id,
// теперь, зная id, можно найти соответствующий объект
....once('popupopen', this.onPopupOpen)
rcs.forEach((residential, i) => {
...
/*
* никакого this при создании попапов не надо - какой смысл делать свойством
* компонента один из многих попапов (т.к. тут цикл, новая итерация - новый
* попап, в результате будет сохранён последний созданный)?
*
* то же касается и координат маркера ниже
*/
const popup = DG.popup({
...
setTimeout(() => {
DG.marker([ residential.latitude, residential.longitude ], { icon: myDivIcon })
.addTo(this.markers)
.bindPopup(popup);
}, i * 200);
});
this.map.closePopup().А если открыты несколько попапов разных маркеров? <...> как можно открыть необходимый попап маркера (без нажатия на сам маркер конечно)
- e.originalEvent.target.getAttribute('data-id')
+ e.originalEvent.target.closest('[data-id]').dataset.idЭто верстка шаблона маркера 2гис, отдельно навешивать на нее обработчики нельзя
DG.divIcon? Да, туда нельзя. А на сам маркер - можно:const marker = DG.marker(...
marker.on('click', onMarkerClick);function onMarkerClick(e) {
// ...
}Я вообще сделал это чтобы как то понять на какой маркер кликнули
target.this.markers - это DG.featureGroup. Оставляете общий обработчик клика, смотрите у события свойство eventTargets, это массив, внутри будет кликнутый маркер.
zoom(change) {
this.map.setZoom(this.map.getZoom() + change);
},<div @click="zoom(+1)">zoom in</div>
<div @click="zoom(-1)">zoom out</div>
marker.on('popupopen', function(e) {
new Vue({ el: e.popup._contentNode });
});
if (!this.map) {
this.map = DG.map(...);
this.marker = DG.marker(...);
} else {
this.map.panTo(...)
this.marker.setLatLng(...);
}