2

我正在使用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();

为了让它工作,您需要创建一个地图和矢量图层,如果有人真的需要它,我可以添加它们。

所以总而言之,我需要弄清楚如何阻止“over”回调多次触发。

谢谢你的帮助。

4

1 回答 1

2

我发现有一种方法可以做我想做的事,但这似乎有点可怕,因为它使用第二种语法来添加回调,而且我不明白为什么会有不止一种方法将处理程序添加到层。希望这将在下一个版本中被采纳。

这是我修改鼠标悬停处理程序的代码...

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

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

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

于 2013-01-04T13:34:23.673 回答