[英]Google Maps API drops markers individually
从XML文件加载标记时,我尝试逐个放置标记(有延迟),但似乎无法正常工作。 我究竟做错了什么?
一次全部删除它们是可行的。
这是我到目前为止的内容:
var map = null;
function initialize(){
var mapOptions = {
center: new google.maps.LatLng(41.899084, 12.486559),
zoom: 2,
mapTypeId: google.maps.MapTypeId.HYBRID,
mapTypeControl: false,
streetViewControl: false
};
map = new google.maps.Map(document.getElementById('map-canvas'), mapOptions);
loadXMLFile();
}
function loadXMLFile(){
var filename = 'concerts.xml';
$.ajax({
type: "GET",
url: filename ,
dataType: "xml",
success: parseXML,
error : onXMLLoadFailed
});
function onXMLLoadFailed(){
alert("An Error has occurred.");
}
function parseXML(xml){
var bounds = new google.maps.LatLngBounds();
var counter = 0;
$(xml).find("resultsPage results event").each(function(){
//Read the latitude and longitude for each Marker
var lat = $(this).find('venue').attr('lat');
var lng = $(this).find('venue').attr('lng');
if (lat == "") {
var locLat = $(this).find('location').attr('lat');
var locLng = $(this).find('location').attr('lng');
var markerCoords = new google.maps.LatLng(parseFloat(locLat), parseFloat(locLng));
}else{
var markerCoords = new google.maps.LatLng(parseFloat(lat), parseFloat(lng));
}
bounds.extend(markerCoords);
setTimeOut(function () {
addMarker(markerCoords);
}, counter * 200);
//increment counter
counter++;
});
map.fitBounds(bounds);
}
}
function addMarker(markerCoords){
var marker = new google.maps.Marker({
map: map,
position: markerCoords,
animation: google.maps.Animation.DROP
});
}
google.maps.event.addDomListener(window, 'load', initialize);
您的问题是您要在设置的超时时间内关闭markerCoords
,因此到函数运行时,它已经更改,它将在同一位置添加多个标记。
setTimeout(function () {
addMarker(markerCoords); // markerCoords will change before addMarker called!
}, counter * 200);
您的修复相对简单,只需传递markerCoords
的副本markerCoords
:
setTimeout(
(function(c) {
return function() {
addMarker(c);
}
}(markerCoords)), counter++);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.