メンバーのディレクトリを作成しています。このディレクトリは、名前と町または都市からの距離の順にメンバーを一覧表示し、Google MapsAPIv3を使用して地図に表示します。
ほぼ思い通りに動作していますが、少し遅いのではないかと心配しています。すでに非同期で読み込んでいますが、マーカーに問題があります。
マップをロードしてから、マーカーを1つずつすばやく連続してドロップアニメーションに表示したいと思います。現時点では遅延があり、それらはすべて一緒にドロップし、マップに表示されてからドロップすることもありますが、これは非常に奇妙に見えます。
PHP foreachスクリプト(MYSQLデータベースから)を使用して、メンバーのjavascript配列を出力しています。マップ上には10〜400個のマーカーがありますが、通常は一度に100個以下です。
簡潔にするために、以下の例には4つのマーカーのみを含めました(前に述べたように、PHP foreachスクリプトから出力されます)。
<script>
var infowindow = null;
$(document).ready(function () { initialize(); });
function initialize() {
var centerMap = new google.maps.LatLng(53.1,-2.2);
var myOptions = {
zoom: 9,
center: centerMap,
mapTypeId: google.maps.MapTypeId.ROADMAP,
scrollwheel: false
}
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
setMarkers(map, sites);
infowindow = new google.maps.InfoWindow({
content: "loading..."
});
}
var sites = [
['Joe Bloggs',52.1022,-2.1070,1,"Member <a href=\"#\">Joe Bloggs</a>"],
['Peter Pan',52.2022,-2.2070,1,"Member <a href=\"#\">Peter Pan</a>"],
['Andrew Andrewson',52.0322,-2.0170,1,"Member <a href=\"#\">Andrew Andrewson</a>"],
['Peter Peterson',52.0022,-2.0070,1,"Member <a href=\"#\">Peter Peterson</a>"],
];
function setMarkers(map, markers) {
for (var i = 0; i < markers.length; i++) {
var sites = markers[i];
var siteLatLng = new google.maps.LatLng(sites[1], sites[2]);
var marker = new google.maps.Marker({
position: siteLatLng,
map: map,
title: sites[0],
zIndex: sites[3],
html: sites[4],
animation: google.maps.Animation.DROP
});
var contentString = "Some content";
google.maps.event.addListener(marker, "click", function () {
infowindow.setContent(this.html);
infowindow.open(map, this);
});
}
}
function loadScript() {
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'https://maps.googleapis.com/maps/api/js?key=my-key-is-here&sensor=false&' +'callback=initialize';
document.body.appendChild(script);
}
window.onload = loadScript;
</script>
これを高速化して、ページの読み込み後にマーカーをドロップアニメーションに表示するにはどうすればよいですか?