javascript - 打开图层2.12选择功能控制 "over"回调触发两次

标签 javascript openlayers

我正在使用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/

相关文章:

JavaScript/CSS 播放一次 Spritesheet 就变成 gif 了吗?

javascript - 如何使用 OpenLayers 显示 Bing map 图层

javascript - 处理循环内动态选择器的点击 react native

javascript - 在 JavaScript 中调用 id

javascript - ReactJS - 子组件中的 Ajax

javascript - 使用 html 5 范围 slider 更改 openlayer 3 圆半径

android - 如何使用 OpenStreetMap/OpenLayers?

javascript - 使用 CSS 通过 <div> 限制鼠标点击

openlayers - 是否可以分别拖动OpenLayers.Layer.Image

javascript - 如何将从 JSON API 获取的自动完成数据推送到文本框?