0

マーカーの各プロットの間に1秒の遅延を追加する必要があります。次のコードを思いついたのですが、動作させることができません。何か案が ?

var latlng = new google.maps.LatLng(43,2.34);
var myOptions = {
  zoom: 7,
  center: latlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
};
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

for ( var i=0, len=json.length; i<len; i++ ){
  obj = json[i];

  // Get lat / long and put them on the map
  var lat = obj.latitude;
  var long = obj.longitude;

  display_marker(map, lat, long);
}

display_marker = function(map, lat, long){
  setTimeout(function(){}, 1000);
  var marker = new google.maps.Marker({
    map: map,
    position: new google.maps.LatLng(lat,long),
    title: "Latitude: " +  lat + "\nLongitude: " + long,
  });
}
4

2 に答える 2

1

ここで2つの問題が発生しています。

1つ目は、空の関数でsetTimeoutを使用することです。コードはその関数内にある必要があります。

display_marker = function(map, lat, long){
  setTimeout(function() {
    var marker = new google.maps.Marker({
      map: map,
      position: new google.maps.LatLng(lat,long),
      title: "Latitude: " +  lat + "\nLongitude: " + long,
    });
  }, 1000);
}

2つ目は、ループがdisplay_markerを次々にトリガーすることです。したがって、問題1を修正すると、それでもすべてのマーカーが約1000ミリ秒後に生成されます。

これを修正する簡単な方法は、increment-varの場合は現在の値を表示マーカーに渡し、それをsetTimeoutで乗算することです。

var obj, lat, long;
for ( var i=0, len=json.length; i<len; i++ ){
  obj = json[i];

  // Get lat / long and put them on the map
  lat = obj.latitude;
  long = obj.longitude;

  display_marker(map, lat, long, i);
}

display_marker = function(map, lat, long, increment){
  setTimeout(function() {
    var marker = new google.maps.Marker({
      map: map,
      position: new google.maps.LatLng(lat,long),
      title: "Latitude: " +  lat + "\nLongitude: " + long,
    });
  }, increment * 1000);
}

ヒント:変数宣言で何をしたかを見てください。ループ内の変数を再宣言していました

ヒント2:私のコードはテストされていませんが、問題を解決するための正しいアイデアが得られるはずです

于 2013-01-07T16:50:39.650 に答える
1

setTimeoutで後続の行を実行し続ける前に、実行をブロックすることを期待しているようですdisplay_markersetTimeoutそれほど正確ではありませんが、指定された時間の前後に実行する必要があるプロセスを実行スタックに追加することによって機能します。

値を反復処理するときdisplay_markerに、への参照をに渡すことを実行したいようです。setTimeout

setTimeout(function() {
  display_marker(map, lat, long);
}, 1000);

John Resigは、JavaScriptタイマーに関するすばらしいブログ投稿を書きました。これは非常に便利です: http: //ejohn.org/blog/how-javascript-timers-work/。を介してパラメータを渡す方法についてsetTimeoutは、このSOの回答を参照してください:https ://stackoverflow.com/a/1190656/609206 。

于 2013-01-07T16:54:30.820 に答える