Javascript Google maps addListener仅加载一个标记关闭问题
我试图在移动视口时加载google maps标记,但只有我最后添加的标记正在加载。我认为这是一个结束的问题。这是我代码的一部分:Javascript Google maps addListener仅加载一个标记关闭问题,javascript,google-maps,closures,Javascript,Google Maps,Closures,我试图在移动视口时加载google maps标记,但只有我最后添加的标记正在加载。我认为这是一个结束的问题。这是我代码的一部分: function initMap() { var map = new google.maps.Map(document.getElementById('map'), { center: new google.maps.LatLng(42.271084, -83.737277), zoom: 16 }); downloadU
function initMap() {
var map = new google.maps.Map(document.getElementById('map'), {
center: new google.maps.LatLng(42.271084, -83.737277),
zoom: 16
});
downloadUrl('/data', function(results) {
var resultsJSON = JSON.parse(results.responseText).data;
for (var i = 0; i < resultsJSON.length; i++) {
var lat = resultsJSON[i].lat;
var lng = resultsJSON[i].lng;
var latLng = new google.maps.LatLng(lat, lng);
var marker = new google.maps.Marker({
position: latLng,
map: map,
category:year,
icon: icon.style,
scale: 2
});
if(map.getBounds().contains(marker.getPosition())) {
marker.setMap(map);
}
else {
marker.setMap(null);
}
google.maps.event.addListener(map, "idle", function() {loadMarker(map, marker)});
}
});
}
function downloadUrl(url, callback) {
#ajax call
}
function loadMarker(map, marker) {
if(map.getBounds().contains(marker.getPosition())) {
marker.setMap(map);
console.log("Hello world");
}
else {
marker.setMap(null);
}
}
函数initMap(){
var map=new google.maps.map(document.getElementById('map'){
中心:新google.maps.LatLng(42.271084,-83.737277),
缩放:16
});
下载URL('/data',函数(结果){
var resultsJSON=JSON.parse(results.responseText).data;
for(var i=0;i
您可以在循环内使用此命令
google.maps.event.addListener(map, "idle", function() {loadMarker(map, marker)});
在循环的每次迭代中,您都会尝试向事件“idle”添加一个匿名函数。在每一个事务中,你都会用新的函数和新的数据重写这个函数。作为最后一个事务的结果,您最后添加的标记正在加载。您应该创建一个标记数组,并在循环结束后传递它们。大概是这样的:
downloadUrl('/data', function(results) {
var resultsJSON = JSON.parse(results.responseText).data;
var markers = [];
for (var i = 0; i < resultsJSON.length; i++) {
var lat = resultsJSON[i].lat;
var lng = resultsJSON[i].lng;
var latLng = new google.maps.LatLng(lat, lng);
var marker = new google.maps.Marker({
position: latLng,
map: map,
category:year,
icon: icon.style,
scale: 2
});
markers[i] = marker;
}
loadMarker(map, markers);
google.maps.event.addListener(map, "idle", function() {loadMarker(map, markers)});
});
function loadMarker(map, markers) {
for (var i = 0; i < markers.length; i++) {
if(map.getBounds().contains(markers[i].getPosition())) {
markers[i].setMap(map);
console.log("Hello world");
}
else {
markers[i].setMap(null);
}
}
}
downloadUrl('/data',函数(结果){
var resultsJSON=JSON.parse(results.responseText).data;
var标记=[];
for(var i=0;i
您在控制台中遇到错误,还是其他什么?这个代码的结果是什么?它不起作用。您发布的代码会导致同时加载所有标记。我希望标记仅在位于“地图”视口中时加载。