Javascript 谷歌地图API v3~只需关闭一个信息窗口?
试图简单地关闭一个信息窗口 我已经有了一系列的标记,所以像这样的东西会很好。谢谢Javascript 谷歌地图API v3~只需关闭一个信息窗口?,javascript,google-maps,google-maps-api-3,Javascript,Google Maps,Google Maps Api 3,试图简单地关闭一个信息窗口 我已经有了一系列的标记,所以像这样的东西会很好。谢谢 MyMarkers[i].infowindow.close(); 使用,您可以使用该方法轻松地关闭信息窗口。您只需保留对正在使用的InfoWindow对象的引用。考虑下面的例子,它打开了信息框并在5秒后关闭: <!DOCTYPE html> <html> <head> <meta http-equiv="content-type" content="text/ht
MyMarkers[i].infowindow.close();
使用,您可以使用该方法轻松地关闭信息窗口
。您只需保留对正在使用的InfoWindow
对象的引用。考虑下面的例子,它打开了<代码>信息框并在5秒后关闭:
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title>Google Maps API InfoWindow Demo</title>
<script src="http://maps.google.com/maps/api/js?sensor=false"
type="text/javascript"></script>
</head>
<body>
<div id="map" style="width: 400px; height: 500px;"></div>
<script type="text/javascript">
var map = new google.maps.Map(document.getElementById('map'), {
zoom: 4,
center: new google.maps.LatLng(-25.36388, 131.04492),
mapTypeId: google.maps.MapTypeId.ROADMAP
});
var marker = new google.maps.Marker({
position: map.getCenter(),
map: map
});
var infowindow = new google.maps.InfoWindow({
content: 'An InfoWindow'
});
infowindow.open(map, marker);
setTimeout(function () { infowindow.close(); }, 5000);
</script>
</body>
</html>
然后您可以按如下方式打开和关闭InfoWindow
:
marker.infowindow.open(map, marker);
marker.infowindow.close();
如果您有一组标记,同样适用:
var markers = [];
marker[0] = new google.maps.Marker({
position: map.getCenter(),
map: map
});
marker[0].infowindow = new google.maps.InfoWindow({
content: 'An InfoWindow'
});
// ...
marker[0].infowindow.open(map, marker);
marker[0].infowindow.close();
也可以共享/重用同一个infoWindow对象。 请参阅此google以供参考 与演示中的代码相同
var-Demo={map:null,infoWindow:null
};
/**
*单击地图上的任意位置并关闭“信息”窗口时调用。
*/
Demo.closeInfoWindow=函数(){
Demo.infoWindow.close();
};
/**
*打开“共享信息”窗口,将其定位到指定的标记,然后
*将标记的位置显示为其内容。
*/
Demo.openInfoWindow=函数(标记){
var markerLatLng=marker.getPosition();
Demo.infoWindow.setContent([
“标记位置为:
”,
markerLatLng.lat(),
', ',
markerLatLng.lng()
].加入(“”);
Demo.infoWindow.open(Demo.map,marker);
},
/**
*在初始页面加载时仅调用一次以初始化映射。
*/
Demo.init=函数(){
//创建Google地图的单个实例。
var centerLatLng=新的google.maps.LatLng(37.789879,-122.390442);
Demo.map=new google.maps.map(document.getElementById('map-canvas'){
缩放:13,
中心:中心板条,
mapTypeId:google.maps.mapTypeId.ROADMAP
});
//创建要共享的InfoWindow对象的单个实例
//由所有地图对象向用户显示信息。
Demo.infoWindow=新的google.maps.infoWindow();
//单击地图上的任意位置时关闭“信息”窗口。
google.maps.event.addListener(Demo.map,'click',Demo.closeInfoWindow);
/在旧金山附近的几个随机位置添加多个标记。
//第一随机标记
var marker1=新的google.maps.Marker({
地图:Demo.map,
位置:中心线
});
//将事件侦听器注册到每个标记以打开共享信息
//单击或拖动时显示标记位置的窗口。
google.maps.event.addListener(marker1,'click',function(){
openInfoWindow(marker1);
});
//第二随机标记
var marker2=新的google.maps.Marker({
地图:Demo.map,
位置:新google.maps.LatLng(37.787814,-122.40764),
德拉格布尔:是的
});
//将事件侦听器注册到每个标记以打开共享信息
//单击或拖动时显示标记位置的窗口。
google.maps.event.addListener(marker2,'click',function(){
openInfoWindow(marker2);
});
//第三随机标记
var marker3=新的google.maps.Marker({
地图:Demo.map,
位置:新google.maps.LatLng(37.767568,-122.391665),
德拉格布尔:是的
});
//将事件侦听器注册到每个标记以打开共享信息
//单击或拖动时显示标记位置的窗口。
google.maps.event.addListener(marker3,'click',function(){
openInfoWindow(marker3);
});
}
我也遇到了类似的问题。我只是在代码中添加了以下内容:
closeInfoWindow = function() {
infoWindow.close();
};
google.maps.event.addListener(map, 'click', closeInfoWindow);
完整的js代码是(上面的代码距离底部大约15行):
将关闭打开的信息窗口。
它的工作原理与相同,您只需在创建信息窗口的函数中的地图上添加一个单击侦听器即可
google.maps.event.addListener(marker, 'click', function() {
var infoWindow = createInfoWindowForMarker(marker);
infoWindow.open(map, marker);
google.maps.event.addListener(map, 'click', function() {
infoWindow.close();
});
});
这一点也会起作用:
google.maps.event.addListener(marker, 'click', function() {
if(!marker.open){
infowindow.open(map,marker);
marker.open = true;
}
else{
infowindow.close();
marker.open = false;
}
});
它将在单击时打开一个信息窗口,如果已打开,则在单击时关闭它
同样,在看过Logan的解决方案后,这两种方案可以组合成:
google.maps.event.addListener(marker, 'click', function() {
if(!marker.open){
infowindow.open(map,marker);
marker.open = true;
}
else{
infowindow.close();
marker.open = false;
}
google.maps.event.addListener(map, 'click', function() {
infowindow.close();
marker.open = false;
});
});
它将在单击时打开一个信息窗口,在单击并打开时关闭它,如果在地图上的任何位置单击并打开信息窗口,则关闭它。以下事件侦听器为我很好地解决了这一问题,即使使用了多个标记和信息窗口:
//Add click event listener
google.maps.event.addListener(marker, 'click', function() {
// Helper to check if the info window is already open
google.maps.InfoWindow.prototype.isOpen = function(){
var map = infoWindow.getMap();
return (map !== null && typeof map !== "undefined");
}
// Do the check
if (infoWindow.isOpen()){
// Close the info window
infoWindow.close();
} else {
//Set the new content
infoWindow.setContent(contentString);
//Open the infowindow
infoWindow.open(map, marker);
}
});
我们可以使用infowindow.close(地图);如果已使用infowindow=new google.maps.infowindow()初始化信息窗口,则关闭所有信息窗口 哇,金徽章!很多人都看到了这一点。一定有很多人都有同样的问题。和什么一样?你忘了完成你的句子了吗?这段代码好像少了什么。生成的地图显示空的信息窗口。@husayt这是一个非常古老的答案,我相信这项技术在过去3年中已经发生了变化。此外,代码需要为您自己的目的进行配置。OOP genious的出色解释力!;-)谢谢这将为每个/某些/一个标记上附加特殊信息打开一百万扇门。。。随时随地收集或更换。谢谢你的好主意!
google.maps.event.addListener(marker, 'click', function() {
var infoWindow = createInfoWindowForMarker(marker);
infoWindow.open(map, marker);
google.maps.event.addListener(map, 'click', function() {
infoWindow.close();
});
});
google.maps.event.addListener(marker, 'click', function() {
if(!marker.open){
infowindow.open(map,marker);
marker.open = true;
}
else{
infowindow.close();
marker.open = false;
}
});
google.maps.event.addListener(marker, 'click', function() {
if(!marker.open){
infowindow.open(map,marker);
marker.open = true;
}
else{
infowindow.close();
marker.open = false;
}
google.maps.event.addListener(map, 'click', function() {
infowindow.close();
marker.open = false;
});
});
//Add click event listener
google.maps.event.addListener(marker, 'click', function() {
// Helper to check if the info window is already open
google.maps.InfoWindow.prototype.isOpen = function(){
var map = infoWindow.getMap();
return (map !== null && typeof map !== "undefined");
}
// Do the check
if (infoWindow.isOpen()){
// Close the info window
infoWindow.close();
} else {
//Set the new content
infoWindow.setContent(contentString);
//Open the infowindow
infoWindow.open(map, marker);
}
});