当用户将鼠标悬停在InfoWindow上时,取消Google Maps V3 InfoWindow关闭事件

时间:2014-09-03 18:39:43

标签: javascript google-maps-api-3

当用户将鼠标移出infowindow时,我想关闭infowindow。但是,在下面的代码中,即使我将鼠标放在infowindow上,它也会在5秒后关闭。是这个错误还是有其他解决方案?

var info = new google.maps.InfoWindow({
        content: '<div>Loading...</div>'
});



var bindMarker = function(marker, attr, feature)
{   

    google.maps.event.addListener(marker, 'mouseover', function(clicked) {
            info.setContent(self.createInfoWindowFor(marker, attr, feature));
            info.open(self.map, marker);
    });

    google.maps.event.addListener(marker, 'mouseout', function(){
        setTimeout(function(){info.close(self.map, marker);}, '5000');
    });

    google.maps.event.addListener(marker, 'click', function(clicked) {
            info.close(self.map, marker);

    });

};

2 个答案:

答案 0 :(得分:0)

根据我的理解,您的代码工作正常,您只是想要阻止infowindow消失,如果您将鼠标悬停在infowindow上。

要执行此操作,您需要为超时ID 创建一个全局变量(请参阅https://developer.mozilla.org/en-US/docs/Web/API/WindowTimers.clearTimeout)以获取超时功能,因此在代码的顶部:

var infoTimeoutID = null;

然后您需要在拨打setTimeout时设置超时ID:

        infoTimeoutID = setTimeout(function(){info.close(self.map, marker);}, '5000');

然后你想要在显示如下所示的infoWindow时添加一个mouseover监听器:

function() {
    if(infoTimoutId != null) {
        window.clearTimeout(infoTimeoutID);
    }
}

您还需要添加一个关闭infoWindow的mouseout处理程序(如果需要)。

答案 1 :(得分:0)

如果我理解正确,你使用setTimeOut有时间将鼠标放在infowindow上,所以它不会在标记的mouseout上关闭。

使用标记的mouseout的Intead尝试鼠标移动地图。这样,如果你将鼠标放在infowindow上,事件mousemove就不会触发,并且可以将鼠标放在infowindow上,而不是关闭它。但是当你在地图上移动时,信息窗会关闭。

google.maps.event.addListener(map, 'mousemove', function (event) {
    infowindow1.close();
});