当悬停在标记上时,GMaps“mouseout”事件未触发

时间:2014-01-29 16:06:40

标签: javascript jquery google-maps google-maps-api-3

我有一个eventlistener在我的谷歌地图对象上监听“mouseout”事件。 这在大多数情况下都很有效,因为当光标离开地图的边界时会触发它。

但是如果光标离开地图的边缘有一个标记,则它不会触发。 有关说明,请参阅此图片:

enter image description here

有人知道解决这个问题的方法吗?

1 个答案:

答案 0 :(得分:0)

我最终使用谷歌地图事件监听器解决了这个问题:

this.cursorLeavesMapListener = new google.maps.event.addListener(this.mapObject.gObj, "mouseout", function(e){thisStageMachine.cursorLeftMap()});

这节课在这里:

(function(window)
{
    function cursorState(stageMachine)
    {
        this.stageMachine = stageMachine;
        this.state = "out";

        this.currentCheckStateTimer = null;
        var thisCursorState = this;
        this.stageMachine.mapObject.mapDOMDiv.addEventListener("mouseover", function(e){ thisCursorState.setInMapState() });
        this.stageMachine.mapObject.mapDOMDiv.addEventListener("mouseout", 
            function(e){ 
                thisCursorState.setOutOfMapState(); 
                window.clearTimeout(thisCursorState.currentCheckStateTimer);
                thisCursorState.currentCheckStateTimer = window.setTimeout( function(){thisCursorState.checkState()},   100);
            });
    }

    cursorState.prototype.setInMapState = function()
    {
        this.state = "in";
    }

    cursorState.prototype.setOutOfMapState = function()
    {
        this.state = "out";
    }

    cursorState.prototype.checkState = function()
    {
        if(this.state=="out")
        {
            this.stageMachine.cursorLeftMap();
        }
    }

    window.cursorState = cursorState;
}(window));

你需要这个带有鼠标悬停和鼠标移动的DOMversions的奇怪结构,因为它们会在你将光标移动到地图上时不断触发。它可能与谷歌地图如何将瓷砖添加到DOM有关。 然而,当你的鼠标离开地图时,只有mouseout事件会触发,所以在100毫秒之后检查是否没有触发新的鼠标悬停事件(因为我们上次触发鼠标输出)是你需要做的,以确保我们实际上已经离开了地图当mouseout被触发时 它显然非常hacky,但它就像一个魅力。

其中一个总是被解雇。

如果有人有更优雅的解决方案,请分享。