将弹出窗口添加到谷歌地图中的多个标记中
adding popup to more than one marker in Google Map
我有点纠结于这个看似简单的问题。我想在谷歌地图中的多个标记上添加一条弹出消息。以下是我目前稍微简化的代码:
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Map1</title>
<style type="text/css">
html, body, #map-canvas {
height: 100%;
width: 100%;
margin: 0;
padding: 0;
}
#marker-tooltip {
display: none;
position:absolute;
width: 300px;
height: 200px;
background-color: #ccc;
margin: 15px;
}
</style>
<script type="text/javascript"
src="https://maps.googleapis.com/maps/api/js">
</script>
<script type="text/javascript">
function initialize() {
var mapOptions = {
zoom: 5,
center: new google.maps.LatLng(52.04, -1.5),
mapTypeId: google.maps.MapTypeId.TERRAIN
};
var map = new google.maps.Map(document.getElementById('map-canvas'),
mapOptions);
var pinString1 = '{"lat":52.04,"lng":-1.5}';
var pinString2 = '{"lat":52.21,"lng":-1.22}';
var infowindow = new google.maps.InfoWindow({
content: "Pin1 Popup"
});
var marker = new google.maps.Marker({
position: JSON.parse(pinString1),
map: map,
title: 'Pin1 Title'
});
marker.addListener('click', function () {
infowindow.open(map, marker);
});
infowindow = new google.maps.InfoWindow({
content: "Pin2 Popup"
});
marker = new google.maps.Marker({
position: JSON.parse(pinString2),
map: map,
title: 'Pin2 Title'
});
marker.addListener('click', function () {
infowindow.open(map, marker);
});
}
google.maps.event.addDomListener(window, 'load', initialize);
</script>
</head>
<body>
<div id="map-canvas"></div>
</body>
</html>
点击事件似乎只是添加到最后一个标记中。为什么会发生这种情况?我该怎么解决这个问题?
PS:
将其重构为一个函数也解决了两次使用标记的问题:
function CreateMarker(markerPositionString, markerTitle, infoWindowContent, map) {
var infowindow = new google.maps.InfoWindow({
content: infoWindowContent
});
var marker = new google.maps.Marker({
position: JSON.parse(markerPositionString),
map: map,
title: markerTitle
});
marker.addListener('click', function () {
infowindow.open(map, marker);
});
}
您对两个不同的标记对象使用相同的引用。您应该为每个标记创建一个单独的参考:
// create first reference
var marker1 = new google.maps.Marker({
position: JSON.parse(pinString1),
map: map,
title: 'Pin1 Title'
});
marker1.addListener('click', function () {
infowindow.open(map, marker1);
});
// ...
// create second reference
var marker2 = new google.maps.Marker({
position: JSON.parse(pinString2),
map: map,
title: 'Pin2 Title'
});
marker2.addListener('click', function () {
infowindow.open(map, marker2);
});
相关文章:
- 谷歌地图点击潜水触发信息窗口
- 将FlowPlayer嵌入谷歌地图信息窗口
- 当我浏览回页面时,谷歌地图信息窗口不会弹出
- 谷歌地图信息窗口Z索引
- 谷歌地图信息窗口为每个标记显示相同的内容
- 如何隐藏谷歌地图Api 3中InfoBox窗口中的关闭(x)按钮
- 为位于路线上的谷歌地图标记(起点和终点)设置一个信息窗口
- 信息窗口谷歌地图点击事件给出错误
- 在新窗口中通过谷歌地图的localStorage作为地图中心
- Javascript谷歌地图每个信息窗口
- 更新打开的谷歌地图信息窗口
- 棱角分明的谷歌地图双窗口
- 在谷歌地图的信息窗口内点击按钮
- 谷歌地图API-信息窗口显示谷歌位置API信息
- 谷歌地图API-获取信息窗口打开时,点击一个圆圈
- 谷歌地图位置自动完成被jQuery Mobile弹出窗口阻止
- 单击角度谷歌地图中的多边形时如何显示窗口
- 角度谷歌地图 - 窗口不会在点击时打开
- 谷歌地图-窗口.Initialize不是一个函数
- 如何获得边界框坐标为我的谷歌地图窗口