Google 用 for() 映射 infowindows 问题
Google maps infowindows problems with the for()
我正在尝试使用 for() 放置一个包含不同内容的信息窗口,但它不起作用。这是我的代码:
var infowindow=[];
var myMarker=[];
var marker=[];
for (i = 0; i < dl.length; i++) {
myMarker[i]=new google.maps.LatLng(lt[i], ln[i]);
marker[i] = new google.maps.Marker({
position: myMarker[i],
map: map
});
}
for (var i = 0; i < dl.length; i++) {
google.maps.event.addListener(marker[i],'mouseover', function(){
infowindow[i] = new google.maps.InfoWindow({
content:dl[i]
});
infowindow[i].open(map,marker[i]);
});
google.maps.event.addListener(marker[i],'mouseout',function() {
infowindow[i].close();
});
google.maps.event.addListener(marker[i],'click',function() {
alert("Y ahora te abriría otra pagina... si tuviera una"+i);
});
}
第一个 for 一切都很好,但是当我尝试使用事件侦听器时,它就变坏了。
变量:dl[]
、lt[]
、ln[]
之前已初始化。
信息窗口不是那样工作的。创建信息窗口的单个副本(而不是维护数组)并在每个标记的鼠标悬停事件期间使用 infowindow.setContent() 设置其内容。
编辑:您在回复中的解决方案会起作用,或者这里有一个更简洁的解决方案:
var myMarker=[];
var marker;
var infoWindow = new google.maps.InfoWindow();
for (i = 0; i < dl.length; i++) {
myMarker[i]=new google.maps.LatLng(lt[i], ln[i]);
marker = new google.maps.Marker({
position: myMarker[i],
map: map
});
(function(msg) {marker.addListener('mouseover', function() {
infoWindow.setContent(msg);
infoWindow.open(marker.get('map'), marker);
});
})(dl[i]);
marker.addListener('mouseout', function() {
infoWindow.close();
});
}
我结束了这个,效果很好
var myMarker=[];
var marker;
for (i = 0; i < dl.length; i++) {
myMarker[i]=new google.maps.LatLng(lt[i], ln[i]);
marker = new google.maps.Marker({
position: myMarker[i],
map: map
});
attachSecretMessage(marker, dl[i]);
}
function attachSecretMessage(marker, secretMessage) {
var infowindow = new google.maps.InfoWindow({
content: secretMessage
});
marker.addListener('mouseover', function() {
infowindow.open(marker.get('map'), marker);
});
marker.addListener('mouseout', function() {
infowindow.close();
});
}
我正在尝试使用 for() 放置一个包含不同内容的信息窗口,但它不起作用。这是我的代码:
var infowindow=[];
var myMarker=[];
var marker=[];
for (i = 0; i < dl.length; i++) {
myMarker[i]=new google.maps.LatLng(lt[i], ln[i]);
marker[i] = new google.maps.Marker({
position: myMarker[i],
map: map
});
}
for (var i = 0; i < dl.length; i++) {
google.maps.event.addListener(marker[i],'mouseover', function(){
infowindow[i] = new google.maps.InfoWindow({
content:dl[i]
});
infowindow[i].open(map,marker[i]);
});
google.maps.event.addListener(marker[i],'mouseout',function() {
infowindow[i].close();
});
google.maps.event.addListener(marker[i],'click',function() {
alert("Y ahora te abriría otra pagina... si tuviera una"+i);
});
}
第一个 for 一切都很好,但是当我尝试使用事件侦听器时,它就变坏了。
变量:dl[]
、lt[]
、ln[]
之前已初始化。
信息窗口不是那样工作的。创建信息窗口的单个副本(而不是维护数组)并在每个标记的鼠标悬停事件期间使用 infowindow.setContent() 设置其内容。
编辑:您在回复中的解决方案会起作用,或者这里有一个更简洁的解决方案:
var myMarker=[];
var marker;
var infoWindow = new google.maps.InfoWindow();
for (i = 0; i < dl.length; i++) {
myMarker[i]=new google.maps.LatLng(lt[i], ln[i]);
marker = new google.maps.Marker({
position: myMarker[i],
map: map
});
(function(msg) {marker.addListener('mouseover', function() {
infoWindow.setContent(msg);
infoWindow.open(marker.get('map'), marker);
});
})(dl[i]);
marker.addListener('mouseout', function() {
infoWindow.close();
});
}
我结束了这个,效果很好
var myMarker=[];
var marker;
for (i = 0; i < dl.length; i++) {
myMarker[i]=new google.maps.LatLng(lt[i], ln[i]);
marker = new google.maps.Marker({
position: myMarker[i],
map: map
});
attachSecretMessage(marker, dl[i]);
}
function attachSecretMessage(marker, secretMessage) {
var infowindow = new google.maps.InfoWindow({
content: secretMessage
});
marker.addListener('mouseover', function() {
infowindow.open(marker.get('map'), marker);
});
marker.addListener('mouseout', function() {
infowindow.close();
});
}