单击并显示弹出窗口时切换标记颜色
Toggle marker color on click AND show popup
我有一个 geojson featurelayer,我可以为每个标记绑定一个弹出窗口
我可以修改属性以更改标记颜色 onclick,但我不能混合使用两者。
我想更改颜色并显示弹出窗口。我跟着这个
mapbox example
似乎当我添加一个点击事件来改变它的颜色时 "deactivate" 弹出...
一旦我删除此点击事件,弹出窗口就会出现
编辑:此代码有效
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);
});
}
当您使用这条线时 featureLayer.setGeoJSON(geoJson);
这样你每次都改变特征层的上下文,所以为了触发弹出和颜色改变你需要以下两个步骤
- 将
e.layer.openPopup();
更改为 e.layer.bindPopup();
- 将此行移至
resetColors();
之前,即此行 e.layer.bindPopup();
将成为点击功能中的第一行。
注意:如果不行,欢迎在评论中指出
我有一个 geojson featurelayer,我可以为每个标记绑定一个弹出窗口 我可以修改属性以更改标记颜色 onclick,但我不能混合使用两者。 我想更改颜色并显示弹出窗口。我跟着这个 mapbox example
似乎当我添加一个点击事件来改变它的颜色时 "deactivate" 弹出... 一旦我删除此点击事件,弹出窗口就会出现 编辑:此代码有效
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);
});
}
当您使用这条线时 featureLayer.setGeoJSON(geoJson);
这样你每次都改变特征层的上下文,所以为了触发弹出和颜色改变你需要以下两个步骤
- 将
e.layer.openPopup();
更改为e.layer.bindPopup();
- 将此行移至
resetColors();
之前,即此行e.layer.bindPopup();
将成为点击功能中的第一行。
注意:如果不行,欢迎在评论中指出