我正在使用Open Layers (v2.12) ,并尝试使用 SelectFeature .
我已经设法让事情正常工作,但是有一个有趣的行为,“over”回调似乎被触发了两次。这不好,因为我想当用户将鼠标悬停在多边形上时显示工具提示。如果我按原样使用我的代码,它会添加工具提示两次,这最多看起来会闪烁。
更新:我还刚刚意识到“over”回调会覆盖“selectStyle”突出显示,这是一个问题,我现在已经删除了 over 回调,直到找到更好的解决方案。
这是选择功能代码片段...
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();
要使其正常工作,您需要创建 map 和矢量图层,如果有人确实需要它们,我可以添加它们。
总而言之,我需要弄清楚如何阻止“over”回调多次触发。
感谢您的帮助。
最佳答案
我发现有一种方法可以做我想要的事情,但它看起来有点可怕,因为它使用第二种语法来添加回调,而且我不明白为什么会有不止一种方法将处理程序添加到层。希望这会在下一个版本中得到采用。
这是我的代码,并对鼠标悬停处理程序进行了修改...
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 个变体用于添加鼠标事件类型处理程序。
我不想勾选这个作为我的答案,因为它看起来不是一个很好的解决方案。
更新:好吧,没有人提出替代方案,所以我想我被迫接受自己的答案,没关系。
关于javascript - 打开图层2.12选择功能控制 "over"回调触发两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14155765/