Google Maps V3版本,简单的infowindow.close不成功

Jenf_Mu 2011-06-27 09:58:32
var lastInfWnd = null;

google.maps.event.addListener(_marker, 'click', function() {
var infowindow = new google.maps.InfoWindow({
content: divMarkerInf
});
infowindow.open(map, _marker);
if (lastInfWnd) {
lastInfWnd.close();

}
lastInfWnd = infowindow;

});

就是想点开新的infowindow的时候把上次打开的infowindow关掉。我发现它不成功的原因可能是因为这是个网络程序,有速度问题,鼠标点到marker的时候不执行lastInfWnd.close();,
或者当执行lastInfWnd.close();的时候,还没有关掉lastInfWnd,马上就又执行了lastInfWnd = infowindow;
所以lastInfWnd的值改了,lastInfWnd.close()当然关掉的也不是真正的上个弹窗。

我想到的办法是

google.maps.event.addListener(_marker, 'click', function() {
var infowindow = new google.maps.InfoWindow({
content: divMarkerInf
});
infowindow.open(map, _marker);
if (lastInfWnd) {
//lastInfWnd.close();
setTimeout(function() { lastInfWnd.close(); }, 1000);

}
setTimeout(function() { lastInfWnd = infowindow; }, 3000);

});

调试的时候一步一步,等的时间长,效果是正确的,但真正运行,又是错的,到底为什么呀
...全文
844 2 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
逐知逐行 2013-05-15
  • 打赏
  • 举报
回复
要关闭上一个窗口,有两种方法:可以只创建一个InfoWindow,然后每次要再marker上显示infowindow的时候,调用infowindow的setContent(content)方法来给infowindow重新赋值,这样就可以实现每个infowindow显示的内容不一样,又可以关闭上一次开的infowindow。第二种方法是可以创建一个全局变量infowindow数组,每个marker绑定到不同的infowindow数组元素,当要点击的时候,循环infowindow数组,关闭每一个infowindow元素
zhangwuji154 2011-06-27
  • 打赏
  • 举报
回复
if (lastInfWnd) {
lastInfWnd.close();

}
var infowindow = new google.maps.InfoWindow({
content: divMarkerInf
});
infowindow.open(map, _marker);

这样的顺序,能拖延lastInfWnd.close();占用的时间

6,720

社区成员

发帖
与我相关
我的任务
社区描述
专题开发/技术/项目 Google技术社区
社区管理员
  • Google技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧