2015-12-04 4 views
0

У меня есть функциональный слой Mapbox (с источником geoJSON в качестве источника) со всплывающими окнами для каждого маркера (с divIcon). Мы изменяем размер значка маркера на разных уровнях масштабирования (используя css). Как сбросить смещение всплывающего окна на разных уровнях масштабирования?Mapbox- сбросить всплывающее смещение dynamcally

Вот начальная настройка маркера и всплывающие окна (это все работает):

var curOffset = [0,1]; 

Markers.on('layeradd', function(la) { 
    var Icon = la.layer, 
    feature = Icon.feature; 
    var popupContent = "<some html>" 

var popupOptions = {   
    autoPan:true, 
    closeButton: false, 
    minWidth: 220, 
    maxWidth: 220, 
    zoomAnimation:true, 
    offset: curOffset 
    }; 

Icon.setIcon(L.divIcon(Iconfeature.properties.icon)); 

Markers.bindPopup(popupContent, popupOptions); 
}); 

Я попытался сбросить смещение на события масштабирования, как это так, но он не работает:

map.on('zoomend', function(e) { 
if (layerOn == true) { 
    size = map.getZoom(); 
    switch (size){ 
    case 14: console.log("14"); curOffset = [0,5]; break; 
    ... 
    } 
} 
}); 

Должен ли я закрыть, а затем открыть всплывающее окно? Я пробовал что-то в этом направлении, но у меня была ошибка.

я получил это предложение от вкладчика листовка Github, но я не смог получить эту работу либо/

«Обновление popup.options.offset, а затем вызвать частный метод popup._updatePosition «.

ответ

0

Вкладчик GitHub листовка также предложили в только изменяя CSS для всплывающего окна на event..once мой коллега и я нашел правильное правило для изменения, он работал:

map.on('zoomend', function(e) { 
    switch (size){ // zoom level 

    case 14: $('.leaflet-popup.leaflet-zoom-animated').css('bottom', '-5px'); $('.leaflet-popup .leaflet-zoom-animated').css('left', '-28px'); break; 
    ... 

Я также пришлось добавить дополнительную проверку в случае, если слой был отключен во время масштабирования, с аналогичным кодом.