2015-09-28 27 views
1

我有一個geojson功能圖層和每個標記我可以綁定一個彈出 和我可以修改屬性來改變標記顏色onclick,但我不能混合兩者。 我想改變顏色並顯示彈出。我跟着這個 mapbox example切換標記顏色點擊並顯示彈出

看來,當我添加一個點擊事件來改變它的顏色「關閉」彈出... 當我刪除此單擊事件,在彈出窗口 編輯:此代碼工作

featureLayer = L.mapbox.featureLayer() 
.loadURL(getUrl()) 
.on('ready', setStyle) 
.on('click', function(e) { 
    e.layer.bindPopup(e.layer.feature.properties.name); 
    resetColors(); 
    e.layer.feature.properties['old-color'] = e.layer.feature.properties['marker-color']; 
    e.layer.feature.properties['marker-color'] = '#ffffb2'; 
    featureLayer.setGeoJSON(geoJson); 
    setPopup(); 
}) 
.addTo(map); 
function resetColors() { 
for (var i = 0; i < geoJson.features.length; i++) { 
    geoJson.features[i].properties['marker-color'] = geoJson.features[i].properties['old-color'] || geoJson[i].features.properties['marker-color']; 
} 
} 

function setStyle() { 

geoJson = featureLayer.getGeoJSON(); 
for (var i = 0; i < geoJson.features.length; i++) { 

    if(geoJson.features[i].properties['d'] <= distanceLocal) 
     var color = '#a1d99b'; 
    else 
     var color = '#636363'; 

    geoJson.features[i].properties['marker-color'] = color; 
    geoJson.features[i].properties['old-color'] = color; 
} 
featureLayer.setGeoJSON(geoJson); 
setPopup(); 
} 
function setPopup() { 


featureLayer.eachLayer(function(marker) { 
    marker.bindPopup(marker.feature.properties.name); 
}); 
} 

回答

0

當你使用這條線featureLayer.setGeoJSON(geoJson);

這樣你每次改變功能層的情況下,所以爲了同時觸發,你需要彈出和顏色改變以下兩個步驟

  • 變化e.layer.openPopup();e.layer.bindPopup();
  • 移動此行resetColors();即該行e.layer.bindPopup();之前將成爲點擊函數中的第一行。

注:如果它不能正常工作,請不要猶豫,更不用說它在評論

+0

感謝您的幫助。我誤解了geojson屬性和圖層之間的關係。我結束了這一點 – stetou