Leastlet.js Проверьте, имеет ли у маркера открытым

StackOverflow https://stackoverflow.com//questions/21063705

  •  26-12-2019
  •  | 
  •  

Вопрос

в соответствии с темой, как я могу проверить, появится ли маркер всплывающим окном?

Например.

var m = new L.marker([2,1]).addTo(map).bindPopup('test');
.

Нажатие на маркер, очевидно, откроет всплывающее окно.

Есть ли какие-либо функциональные возможности:

if(m.popupOpen() == true) {
    // do somehting
}
.

Я пробовал следующее:

m.on('click', function(e) {
    if(m._map.hasLayer(m._popup)) {
        // Do something
    }
}
.

Но это очень flaky.На Chrome он будет работать, на браузере Android, если будет стрелять во второй клик, чтобы он не очень надежен.

Есть ли стандартный способ сделать это?

Спасибо

Это было полезно?

Решение

Вы можете сделать быструю и грязную проверку на свойство _isopen объекта _Popup, содержащегося в L.marker:

var map = L.map('map').setView(L.latLng(0, 0), 0);
var marker = L.marker(L.latLng(0, 0)).addTo(map);
marker.bindPopup("Popup!");
var popup = marker.getPopup(); // returns marker._popup

console.log(popup._isOpen); // false

marker.openPopup();

console.log(popup._isOpen); // true

marker.closePopup();

console.log(popup._isOpen); // false
.

Редактировать: v1.0.0 l.popup имеет метод isOpen:

http://leafletjs.com/reference-1.0.html#Popup-isopen

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top