我想为谷歌地图上的每个标记创建一个自己的窗口。我尝试了这个:
// Create first marker and window
marker = new google.maps.Marker({
position: myLatlng,
map: map
});
contentString = '<div>BOX A</div>';
var infowindow = new google.maps.InfoWindow({
content: contentString
});
marker.addListener('click', function() {
infowindow.open(map, marker);
});
// Create second marker and window
myLatlng = new google.maps.LatLng(12.1364,-86.2514);
marker = new google.maps.Marker({
position: myLatlng,
map: map
});
contentString = '<div>BOX B</div>';
infowindow = new google.maps.InfoWindow({
content: contentString
});
marker.addListener('click', function() {
infowindow.open(map, marker);
});
不幸的是,只有第二个标记有一个包含Box B
的窗口。如果我单击第一个标记,那么带有Box B
的第二个标记的窗口就会弹出。我不明白为什么会发生这种情况。
我注意到,如果我为第二个标记和第二个窗口使用一个新变量,每个标记都有自己的窗口,如下所示:
// Create sceond marker and window
myLatlng = new google.maps.LatLng(12.1364,-86.2514);
marker2 = new google.maps.Marker({
position: myLatlng,
map: map
});
contentString = '<div>BOX B</div>';
infowindow2 = new google.maps.InfoWindow({
content: contentString
});
marker2.addListener('click', function() {
infowindow2.open(map, marker2);
});
但我完全不明白为什么我需要使用新的变量。为什么我不能覆盖旧的变量?
注意:这个问题是关于如何获取多个不同的infoWindows,因此与在Google Maps API v3中只打开一个InfoWindow和Google Maps infoWindow仅在标记上加载最后一条记录不同
以下是完整的代码:
<div id="map" style='height:300px'></div>
<script>
function initMap() {
// init map
var mapDiv = document.getElementById('map');
myLatlng = new google.maps.LatLng(52.4955,13.3437);
var map = new google.maps.Map(mapDiv, {
scrollwheel: false,
center: myLatlng,
zoom: 1
});
var myLatlng, marker, infowindow,contentString;
// Create first marker and window
marker = new google.maps.Marker({
position: myLatlng,
map: map
});
contentString = '<div>BOX A</div>';
var infowindow = new google.maps.InfoWindow({
content: contentString
});
marker.addListener('click', function() {
infowindow.open(map, marker);
});
// Create second marker and window
myLatlng = new google.maps.LatLng(12.1364,-86.2514);
marker = new google.maps.Marker({
position: myLatlng,
map: map
});
contentString = '<div>BOX B</div>';
infowindow = new google.maps.InfoWindow({
content: contentString
});
marker.addListener('click', function() {
infowindow.open(map, marker);
});
}
</script>
当您的第一个标记单击处理程序时
marker.addListener('click', function() {
infowindow.open(map, marker);
});
调用时,您的infowindow
变量指向创建的第二个infowindow,因为您对两个infowindow使用相同的变量:
var infowindow = new google.maps.InfoWindow(..
infowindow = new google.maps.InfoWindow({
SO这里有这样的问题,这个和这个讨论同一个问题。乍一看可能不是同一个问题,但你的问题是范围。
您的问题可以通过使用两个不同的变量轻松解决,或者更好地创建一个可重用的函数:
<script>
function addMarkerWithInfowindow(map, marker_position, infowindow_content){
var myLatlng, marker, infowindow,contentString;
marker = new google.maps.Marker({
position: marker_position,
map: map
});
contentString = infowindow_content;
infowindow = new google.maps.InfoWindow({
content: contentString
});
marker.addListener('click', function() {
infowindow.open(map, marker);
});
}
function initMap() {
// init map
var mapDiv = document.getElementById('map');
myLatlng = new google.maps.LatLng(52.4955,13.3437);
var map = new google.maps.Map(mapDiv, {
scrollwheel: false,
center: myLatlng,
zoom: 1
});
addMarkerWithInfowindow(map, new google.maps.LatLng(52.4955,13.3437), '<div>BOX A</div>');
addMarkerWithInfowindow(map, new google.maps.LatLng(12.1364,-86.2514), '<div>BOX B</div>');
}
</script>
现在处理程序中的变量:
marker.addListener('click', function() {
infowindow.open(map, marker);
});
与函数的范围相关,因此将始终指向正确的信息窗口实例。我建议您阅读更多关于javascript作用域的内容来理解这个问题,在我链接到一些关于这个问题的好文章的问题答案中有一些链接(例如这篇或这篇)。
还有另外四个if语句,它们对其他类别做同样的事情。 它会显示标记,但当我单击标记时,它会显示上次创建的标记的信息窗口。
升级到NativeScript6后,在iOS上点击谷歌地图上的标记以显示相关信息窗口,应用程序就会崩溃。这是由于_layoutrootview被删除-请参见https://github.com/dapriett/nativescript-google-maps-sdk/issues/354 问题是没有提供任何替代方案,google-maps-sdk插件最近也没有任何活动。 按照@manoj的指示,
我正在尝试自定义信息窗口,并在加载地图时显示它。自定义信息窗口出现了,但是,除了默认的信息窗口背景(白色)之外,我还没有为出现的标记设置图标?为什么我会得到这个默认值? 以下是我尝试的内容的屏幕截图: 我不想要白色窗口和标记图标?我正在尝试实现以下截图:如何使用Android map API v2创建自定义形状的位图标记 以下是我正在尝试的:
我想创建一个谷歌地图标记列表,这些标记填充关于这些特定位置的信息窗口,并在信息窗口内链接到维基百科关于该位置的文章。我在这个单击函数中进行Ajax调用,并且这个函数在一个
我正在用VueJS在Laravel 5.7中构建一个应用程序。我有一个谷歌地图(使用vue2谷歌地图构建),有200个标记,每个标记都有一个信息窗口。我想在infoWindow中包含一个路由器链接,但由于该链接是作为字符串传递的,所以Vue似乎没有对其进行解析。 这是我目前的组件-除了路由器链接,所有的工作 有人能建议一种方法来解析路由器链接吗? 谢谢你