تحقق leaflet.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
    }
}

لكنها قشاري جدا.سيتم تشغيله على 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.0.html#popup-isopen

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top