Javascript OpenLayers 3:stylefunction在缩放/平移后不会为未选择的功能调用
我为我的问题准备了一把小提琴:Javascript OpenLayers 3:stylefunction在缩放/平移后不会为未选择的功能调用,javascript,openlayers-3,Javascript,Openlayers 3,我为我的问题准备了一把小提琴: 单击蓝色圆圈选择它->它变为红色 单击另一个蓝色圆圈->原始圆圈变为蓝色(取消选中),新圆圈变为红色(选中) 到目前为止还不错。现在,如果您改为执行以下操作: 单击蓝色圆圈->它变为红色 缩小并返回->它保持红色 单击另一个蓝色圆圈 ->两个圆圈都是红色,而不是取消选择第一个 我所拥有的就是一个selectInteraction,带有styleFunction这样的功能(我做了更多的事情,比如文本和缓存样式,但效果是一样的): 为什么我的“取消选择”样式在缩放或平
selectInteraction
,带有styleFunction
这样的功能(我做了更多的事情,比如文本和缓存样式,但效果是一样的):
为什么我的“取消选择”样式在缩放或平移后错误?就我所见,在调试styleFunction
时,选择是正确的(仅包含1项),只是取消选择的项没有正确设置样式
我使用styleFunction
,因为无论是否选中,我都会根据附着到特征的对象设置文本和半径。因此,我计算特征的样式,并对选定和取消选定的特征使用相同的styleFunction
编辑:解决方案 我更新了。显然,您必须将所有取消选择的功能的样式设置为“null”(参见Jonatas Walker的回答):
更新- 内置
styleFunction
var fill_color = (this instanceof ol.Feature) ?
[0, 0, 255, 1] : [255, 255, 255, 1];
并在“选择侦听器”上设置所选样式:
selectInteraction.on('select', function(evt){
var selected = evt.selected;
var deselected = evt.deselected;
if (selected.length) {
selected.forEach(function(feature){
feature.setStyle(styleFunction);
});
}
if (deselected.length) {
deselected.forEach(function(feature){
feature.setStyle(null);
});
}
});
这是因为对
ol.layer.Vector
和ol.select.Interaction
使用相同的styleFunction
因此,当你放大/缩小向量层时,它会从你的
样式函数中读取样式。是的,我使用相同的styleFunction,因为本质上我希望所有内容都相同(计算文本、计算半径等),除了fillcolor。怎么了?如何改进代码?谢谢。我只需要添加您在SelectListener中使用的5行代码,将所有取消选择的特性的样式设置为“null”。虽然我不明白为什么我需要在缩放/平移后手动执行此操作,但如果我不缩放/平移,则不需要手动执行此操作。
var fill_color = (this instanceof ol.Feature) ?
[0, 0, 255, 1] : [255, 255, 255, 1];
selectInteraction.on('select', function(evt){
var selected = evt.selected;
var deselected = evt.deselected;
if (selected.length) {
selected.forEach(function(feature){
feature.setStyle(styleFunction);
});
}
if (deselected.length) {
deselected.forEach(function(feature){
feature.setStyle(null);
});
}
});