当用户悬停在信息窗口上时,取消Google Maps V3信息窗口关闭事件
Cancel a Google Maps V3 InfoWindow close event when the user hovers over the InfoWindow
当用户将鼠标移出信息窗口时,我想关闭信息窗口。然而,在下面的代码中,即使我把鼠标放在信息窗口上,它也会在5秒内关闭。是这个bug还是有其他解决方案?
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);
});
};
如果我理解正确,您使用setTimeOut是为了有时间将鼠标放在信息窗口上,这样它就不会在鼠标离开标记时关闭。
使用鼠标离开标记的内部尝试鼠标移动地图。通过这种方式,如果你把鼠标放在信息窗口上,事件mousemove不会触发,并且可以把鼠标放到信息窗口上而不关闭它。但当你在地图上移动时,信息窗口会关闭。
google.maps.event.addListener(map, 'mousemove', function (event) {
infowindow1.close();
});
据我所知,您的代码运行良好,如果您将鼠标悬停在信息窗口上,您只想阻止信息窗口消失。
为此,您需要为超时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');
然后,当信息窗口显示如下内容时,您需要将mouseover
侦听器添加到信息窗口中:
function() {
if(infoTimoutId != null) {
window.clearTimeout(infoTimeoutID);
}
}
您还需要添加一个mouseout
处理程序来关闭infoWindow(如果需要的话)。
相关文章:
- 创建一个类似链接的按钮,并通过Javascript函数打开一个新的弹出窗口
- 防止Iframe窗体在新窗口中打开
- 内部分区字体大小获胜'调整浏览器窗口大小时不会随媒体查询而更改
- 调整窗口大小时,可拖动的对象会出现在容器外部
- Javascript排序的图像弹出窗口..可以't单独弹出
- 窗口大小html css
- 弹出窗口出现,然后退出
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- Javascript更新孙窗口中的表单元素
- 如何在选项卡上定义属性'的主窗口对象
- CSS-若窗口太小,滚动条会出现在“表格”单元格上
- 召回窗口加载事件 - javascript
- 为什么不显示警报窗口
- 如何使用modalDialog来显示可以在所有浏览器中工作的弹出窗口
- Chrome应用程序调整窗口大小保持纵横比
- 新选项卡被弹出窗口阻止程序阻止
- 如何访问UIWebView'的子窗口上下文
- 刷新父窗口后无法关闭窗口
- 自动关闭弹出窗口的Javascript
- 如何使用特定大小的浏览器窗口打开我的页面