【问题标题】:Toggle marker color on click AND show popup单击并显示弹出窗口时切换标记颜色
【发布时间】:2016-09-04 23:13:05
【问题描述】:

我有一个 geojson 功能层,我可以为每个标记绑定一个弹出窗口 我可以修改属性以在单击时更改标记颜色,但我不能将两者混合使用。 我想更改颜色并显示弹出窗口。我跟着这个 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);
});
}

【问题讨论】:

    标签: leaflet mapbox


    【解决方案1】:

    当你使用这条线featureLayer.setGeoJSON(geoJson);

    这样您每次都会更改要素图层的上下文,因此为了触发弹出窗口和颜色更改,您需要以下两个步骤

    • e.layer.openPopup(); 更改为e.layer.bindPopup();
    • 将此行移到resetColors(); 之前,即此行e.layer.bindPopup(); 将成为点击函数内的第一行。

    注意:如果不起作用,请不要犹豫在 cmets 中提及

    【讨论】:

    • 感谢您的帮助。我误解了 geojson 属性和图层之间的联系。我结束了这个
    猜你喜欢
    • 1970-01-01
    • 2020-02-16
    • 2015-06-27
    • 2014-11-14
    • 2020-06-03
    • 2012-08-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多