我正在使用 Google Map API v3 来尝试填充地图,让人们宣传他们的工作可用性。地图输出良好并且填充良好,我正在使用动画下降功能使它们很好地落入。然而,它们都是一次性掉下来的,我想让它们一次掉一个,添加一个简单的延迟是解决方案,谷歌本身就是一个例子。唯一的区别是我有一个充满结果的数组。
我当前的代码
locations = [
<?php foreach($searchResults as $clID => $r) { ?>
['<?php echo $r['clUserName']; ?>', <?php echo $r['clLat']; ?>, <?php echo $r['clLng']; ?>, '<?php echo '<div style="width: 100%"><div style="font-weight: bold; line-height: 25px;">' . $r['clUserName'] . '</div>Distance: ' . number_format($r['distance'], 0) . ' miles<br />Will Travel: ' . $r['clWorkRadius'] . ' miles<br />E-mail: <a style="color: #222 !important;;" href="mailto:' . $r['clEmail'] . '"><u>' . $r['clEmail'] . '</u></a><br />Tel: ' . $r['clTelephone'] . ($r['clMobile'] ? '<br />Mob: ' . $r['clMobile'] : '') . '</div>'; ?>'],
<?php } ?>
];
function initialize() {
var mapOptions = {
zoom: 10,
center: new google.maps.LatLng(<?php if($_SESSION['search']['geo']['lat'] !== 0) { echo $_SESSION['search']['geo']['lat'] . ',' .$_SESSION['search']['geo']['lng']; } else { echo '51.507335,-0.127683'; } ?>),
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
var infowindow = new google.maps.InfoWindow();
var marker;
for(i = 0; i < locations.length; i++) {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
animation: google.maps.Animation.DROP,
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(locations[i][3]);
infowindow.open(map, marker);
}
})(marker, i));
}
}
function loadScript() {
var script = document.createElement("script");
script.type = "text/javascript";
script.src = "http://maps.googleapis.com/maps/api/js?key=AIzaSyA6Bru5lLQukzGx3f-AVOBTPmxglkqI5m4&sensor=false&callback=initialize";
document.body.appendChild(script);
}
window.onload = loadScript;
破坏的代码
为了错开地图上的人,我在标记周围添加了一个 setTimeout,将每个人的延迟时间稍长一些。但是,这样做会破坏代码。我不断收到 javascript 错误 TypeError: locations[i] is undefined。为什么简单地将代码包装在 setTimeout 中会阻止它查看位置?
var marker;
for(i = 0; i < locations.length; i++) {
setTimeout(function() {
marker = new google.maps.Marker({
position: new google.maps.LatLng(locations[i][1], locations[i][2]),
animation: google.maps.Animation.DROP,
map: map
});
google.maps.event.addListener(marker, 'click', (function(marker, i) {
return function() {
infowindow.setContent(locations[i][3]);
infowindow.open(map, marker);
}
})(marker, i));
}, 500);
}