Har*_*rry 4 javascript google-maps google-maps-api-3
我制作标记的代码:
for (var marker in markers) {
var posMarker = new google.maps.Marker({
position: new google.maps.LatLng(markers[marker].lat, markers[marker].lng),
map: map,
visible: markers[marker].visible
});
};
Run Code Online (Sandbox Code Playgroud)
我的标记对象:
var markers = {
"London": {"lat": -83.68088192646843, "lng": -125.270751953125, "type": "town", "visible": false},
"Paris": {"lat": -58.1548020417031, "lng": -21.318115234375, "type": "town", "visible": false},
};
Run Code Online (Sandbox Code Playgroud)
我试图能够用一个复选框来切换标记,如下所示:
$('#toggle').change(function() {
for (var marker in markers) {
posMarker.setVisible(true);
};
});
Run Code Online (Sandbox Code Playgroud)
但是只显示了数组中的最后一个标记,如何使它们全部出现?
谢谢.
好吧,我看到posMarker被用作放置Google地图标记的临时变量,并且随着for循环的进行,posMarker引用"更新"到最新放置的标记.这就是为什么只显示最后一个标记的原因.
您需要跟踪所有对Google地图标记的引用,包括那些已被"消费"的引用.我的方法使用一个对象,就像您的markers对象一样,但保留了对Google Maps标记的引用.您还可以使用普通的索引数组(posMarkers []).由你决定.
请参阅演示,注意LatLngs已经过修改以简化(看起来你有一个自定义坐标系).
另外,我没有做这种改变,但我注意到,它可能更合理调用marker中markers,city在markers因为这样你的对象被写入.它更具可读性,但不会影响执行.
最后,for循环块末尾的分号是不需要的,并且要小心Paris对象之后的尾随逗号(我猜你刚刚删除了列表的其余部分).在这种情况下它并不重要,但有时这些尾随逗号可能是难以发现的错误的来源.
function initialize() {
map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
var markers = {
"London": {"lat": 0, "lng": 0, "type": "town", "visible": false},
"Paris": {"lat": 10, "lng": 10, "type": "town", "visible": false}
};
var posMarkers = {};
for (var marker in markers) {
posMarkers[marker] = new google.maps.Marker({
position: new google.maps.LatLng(markers[marker].lat, markers[marker].lng),
map: map,
visible: markers[marker].visible
});
}
$('#toggle').change(function() {
for (var marker in markers) {
if(posMarkers[marker].getVisible()) {
posMarkers[marker].setVisible(false);
}
else {
posMarkers[marker].setVisible(true);
}
}
});
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6090 次 |
| 最近记录: |