使用OpenLayers,我在一个图层上安装了一个OpenLayers.Control.SelectFeature,并将hover选项设置为true。创建图层时,我调用
<layer>.events.register("featureselected",...)
和
<layer>.events.register("featureunselected",...)
注册创建和销毁弹出窗口的函数。一切正常。现在我想在创建弹出窗口之前添加一个小延迟,以避免在跨多个功能移动鼠标时当前发生的弹出闪烁。但是,我似乎无法弄清楚如何做到这一点。我确实找到了OpenLayers.Handler.Hover处理程序,它有一个延迟选项,但我不知道如何将它与SelectFeature控件结合起来(如果我可以的话)。
答案 0 :(得分:1)
我认为this post有一些有价值的信息,我即将验证。一些答案下来,有人谈论闪烁。
编辑:如果您制作自己的标签,我注意到当您举起 labelOutlineWidth 时效果会更低。似乎只有标签的字母计为'悬停'而不是整个PointRadius半径。当你使标签轮廓太大时,标签看起来就像是挡风玻璃的挡板(不是正方形,但它遵循标签轮廓,更具体地说是字母)。
更新:显然这就是为什么当您将文本标签悬停时,请检查一下:pointer events properties。在OpenLayers.Style中设置此属性(pointerEvents :),并尝试值'all'和其他值。这对我来说确实有所作为。
答案 1 :(得分:0)
我将我的功能选择绑定有点不同,这是一个快速(未经测试)的示例,可以为您提供所需的功能。
var timer,
delay = 500, //delay in ms
hover = new OpenLayers.Control.SelectFeature( <layer> , {
hover: true,
onSelect: function (feature) {
// setup a timer to run select function
timer = window.setTimeout(function () {
// your select code
}, delay);
},
onUnselect: function () {
// first cancel the pending timer (no side effects)
window.clearTimeout(timer);
// your unselect code
}
});
<map>.addControl(hover);
hover.activate();