1

このGoogle Maps API v3 ドロップ マーカーが XML から遅れてドロップすることについて質問があることは知っていますか? 私はそれに従いましたが、コードを間違えなければなりませんでした。

function dropAnim(lat,lng,name) {

    console.log("---- " + lat + " - " + lng);

    var marker = new google.maps.Marker({

        position: new google.maps.LatLng(lat,lng),
        map: map,
        title: name,
        animation: google.maps.Animation.DROP,
        icon: imageCar,

    });

}

var counter = 0;

$.get('http://server.com/methods.php?m=loadPins', function(data) {

dataName = data.name.split(";");
dataLat = data.lat.split(";");
dataLng = data.lng.split(";");

dataLength = dataName.length-1;

for(var i=0;i<dataLength;i++) {

   var lat = dataLat[i];
   var lng = dataLng[i];

   console.log(lat + " - " + lng);

   setTimeout(function() {
      dropAnim(lat,lng,dataName[i]);
   }, counter * 400);

   counter++;
} 

},"json");

問題は、まったく同じ場所に 3 つのピンをロードすることです。dataLat と dataLng の負荷は 3 倍異なり、コンソールで確認できますが、関数内からコンソールに出力されるものを見ると、同じ lat と lng (最後のもの) が 3 つあります。

4

1 に答える 1

3

このようにしてみてください:

 setTimeout((function(i) {
     return function(){
        dropAnim(dataLat[i],dataLng[i],dataName[i]);
     };
 })(i), counter * 400);

あなたの問題は、タイムアウトのコールバックが呼び出されたときに、その時点までにループがすでに終了しているため、i変数にすでに値があることでした。dataLength

于 2012-07-19T10:01:32.037 に答える