我正在使用Open Layers (v2.12),我正在尝试使用SelectFeature。
我已经成功地完成了工作,但是有了一个有趣的行为,“over”回调似乎被触发了两次。这不好,因为我想在用户将鼠标悬停在多边形上时显示工具提示。如果我按原样使用我的代码,它会添加工具提示两次,最多看起来就是闪烁。
更新:我也刚刚意识到“over”回调会覆盖“selectStyle”突出显示,这是一个问题,我现在已经删除了过度回调,直到我得到更好的解决方案。
以下是选择要素代码段...
var selectControl = new OpenLayers.Control.SelectFeature(vectorLayer, {
hover: true,
toggle: true,
selectStyle: {
fillOpacity: 0.5,
fillColor: "#ffffff",
strokeColor: "#ffffff",
cursor: "pointer"
},
callbacks: {
click: function(event){
console.log("clicked");
},
over: function(event){
console.log("mouse over");
}
}
})
map.addControl(selectControl);
selectControl.activate();
要实现这一点,你需要创建一个地图和矢量图层,如果有人真的需要它,我可以添加它。
总而言之,我需要弄清楚如何阻止“over”回调多次触发。
感谢您的帮助。
答案 0 :(得分:2)
有一种方法我发现它可以做我想要的,但它看起来有点可怕因为它使用第二种语法来添加回调,我不明白为什么会有多种方法将处理程序添加到a层。希望这将在下一个版本中被选中。
这是我的代码修改鼠标悬停处理程序...
var selectControl = new OpenLayers.Control.SelectFeature(vectorLayer, {
hover: true,
toggle: true,
selectStyle: {
fillOpacity: 0.5,
fillColor: "#ffffff",
strokeColor: "#ffffff",
cursor: "pointer"
},
callbacks: {
click: function(event){
console.log("clicked");
}
//removed 'over' callback
},
//here is the extra handler.
eventListeners: {
featurehighlighted: function(event){
console.log("mouse over");
}
}
})
map.addControl(selectControl);
selectControl.activate();
所以这只会被触发一次,但正如你所看到的,它有2种用于添加鼠标事件类型处理程序的变种。
我不想将此作为我的答案,因为它似乎不是一个很好的解决方案。
更新:没有人提出替代方案,所以我想我不得不接受我自己的答案,没关系。