打开图层2.12选择功能控件“结束”回调触发两次

时间:2013-01-04 10:54:16

标签: javascript openlayers

我正在使用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”回调多次触发。

感谢您的帮助。

1 个答案:

答案 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种用于添加鼠标事件类型处理程序的变种。

我不想将此作为我的答案,因为它似乎不是一个很好的解决方案。

更新:没有人提出替代方案,所以我想我不得不接受我自己的答案,没关系。