gpt4 book ai didi

javascript - 单击另一个标记时,Google map 会关闭之前的信息窗口

转载 作者:行者123 更新时间:2023-11-28 11:48:08 26 4
gpt4 key购买 nike

考虑以下位置:

 var locations =
[{ "id": 1, "ReferenceNumber": "52525252525", "Address" : "School" , "Latitude": "21.585486", "Longitude": "50.258745" },
{ "id": 2, "ReferenceNumber": "6262626262", "Address" : "University", "Latitude": "21.54484411", "Longitude": "50.14846648" },
{ "id": 3, "ReferenceNumber": "424242424", "Address": "PUMPING STATION ", "Latitude": "21.9856341", "Longitude": "61.2587466" }];

使用以下代码,单击多个标记将打开多个信息窗口。如何防止这种情况发生并确保在打开新窗口之前关闭前一个信息窗口?

$.each(locations, function(i, item) {

var marker = new google.maps.Marker({
'position': new google.maps.LatLng(item.Latitude, item.Longitude),
'map': map,
'title': item.Latitude + "," + item.Longitude
});

marker.setIcon('http://maps.google.com/mapfiles/ms/icons/red-dot.png')

var infowindow = new google.maps.InfoWindow({
content: "<div class='infoDiv'><h3>Reference#: </h3> <h6>" + item.ReferenceNumber + "<h3>Location: </h3> <h6>" + item.Address + "</div></div>"
});

google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map, marker);
});

google.maps.event.addListener(map, "click", function(event) {
infowindow.close();
//autoCenter();
});
})

任何帮助将不胜感激。

最佳答案

如果您只需要一次打开一个信息窗口,请不要创建多个信息窗口。您只需要 Infowindow 对象的一个​​实例,并使用 setContent() 方法根据您单击的标记设置其内容。

您还需要在标记单击监听器周围使用闭包。类似这样的事情:

google.maps.event.addListener(marker, 'click', (function(marker) {

return function() {

// Something here
}

})(marker));

更多信息请点击:Using Closures in Event Listeners

下面的工作示例(使用 jQuery)

function initialize() {

var mapOptions = {
zoom: 5,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: new google.maps.LatLng(1, 1)
};

var locations = [
[new google.maps.LatLng(0, 0), 'Marker 1', 'Infowindow content for Marker 1'],
[new google.maps.LatLng(0, 1), 'Marker 2', 'Infowindow content for Marker 2'],
[new google.maps.LatLng(0, 2), 'Marker 3', 'Infowindow content for Marker 3'],
[new google.maps.LatLng(1, 0), 'Marker 4', 'Infowindow content for Marker 4'],
[new google.maps.LatLng(1, 1), 'Marker 5', 'Infowindow content for Marker 5'],
[new google.maps.LatLng(1, 2), 'Marker 6', 'Infowindow content for Marker 6']
];

var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

var infowindow = new google.maps.InfoWindow();

$.each(locations, function(i, item) {

var marker = new google.maps.Marker({
position: item[0],
map: map,
title: item[1],
});

google.maps.event.addListener(marker, 'click', (function(marker) {

return function() {
infowindow.setContent(item[2]);
infowindow.open(map, marker);
}

})(marker));
});

}

google.maps.event.addDomListener(window, 'load', initialize);
#map-canvas {
height: 150px;
}
<div id="map-canvas"></div>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://maps.googleapis.com/maps/api/js?libraries=places&key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>

这里是 Vanilla Javascript 中的相同解决方案(无 jQuery)

function initialize() {

var mapOptions = {
zoom: 5,
mapTypeId: google.maps.MapTypeId.ROADMAP,
center: new google.maps.LatLng(1, 1)
};

var locations = [
[new google.maps.LatLng(0, 0), 'Marker 1', 'Infowindow content for Marker 1'],
[new google.maps.LatLng(0, 1), 'Marker 2', 'Infowindow content for Marker 2'],
[new google.maps.LatLng(0, 2), 'Marker 3', 'Infowindow content for Marker 3'],
[new google.maps.LatLng(1, 0), 'Marker 4', 'Infowindow content for Marker 4'],
[new google.maps.LatLng(1, 1), 'Marker 5', 'Infowindow content for Marker 5'],
[new google.maps.LatLng(1, 2), 'Marker 6', 'Infowindow content for Marker 6']
];

var map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);

var infowindow = new google.maps.InfoWindow();

for (var i = 0; i < locations.length; i++) {

var marker = new google.maps.Marker({
position: locations[i][0],
map: map,
title: locations[i][1]
});

google.maps.event.addListener(marker, 'click', (function (marker, i) {

return function () {
infowindow.setContent(locations[i][2]);
infowindow.open(map, marker);
}

})(marker, i));
}
}

initialize();
#map-canvas {
height: 150px;
}
<div id="map-canvas"></div>

<script src="https://maps.googleapis.com/maps/api/js?libraries=places&key=AIzaSyCkUOdZ5y7hMm0yrcCQoCvLwzdM6M8s5qk"></script>

关于javascript - 单击另一个标记时,Google map 会关闭之前的信息窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43544741/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com