1

Googleマップでルートパスをシミュレートしたいときに問題が発生します。

  • JavaScriptのclosure問題。
  • setTimeout時間間隔を動的に変更する方法。

位置データのリストがあります。Lat、Lng、Timeなど、Googleマップにレンダリングするためのlacionオブジェクトにはさまざまな便利なプロパティがあります...

500ms(*間隔を動的に変更)ごとにGoogleマップマーカーを作成して、マップ上のルートパスをシミュレートしたいのですが、毎回同じ位置データを取得しました。

JavaScriptコードは次のとおりです。

function playback(data) {
    data = [{ Time: 2010, Lat: 1.36046, Lng: 103.897018 }, { Time: 2011, Lat: 1.352566, Lng: 103.855768 }, { Time: 2012, Lat: 1.349477, Lng: 103.802553}];

    for (i = 0; i < data.length; i++) {
        setTimeout(function () { printlocation(data[i]); }, i * 500);
    }
}

function printlocation(cur) {
    alert(cur.Time);
}

コードを実行すると、2012年が3回出力されます。

調査の結果、JavaScriptclosureが原因である可能性がありますが、どのように機能するのかよくわかりません。2つの問題を解決するためのパターンを見つけたいと思います。高度に感謝します。

4

1 に答える 1

0

未テスト:

// Global variable
    var dataArray = [{ Time: 2010, Lat: 1.36046, Lng: 103.897018 }, { Time: 2011, Lat: 1.352566, Lng: 103.855768 }, { Time: 2012, Lat: 1.349477, Lng: 103.802553}];

        function playback() {
            for (i = 0; i < dataArray.length; i++) {
                var data = getData(i);
                setTimeout(function () { printlocation(data); }, i * 500);
            }
        }


            function getData(ix) {
                return dataArray[ix];
            }
于 2012-10-31T10:15:04.743 に答える