1

当我想在 Google 地图上模拟路线时,我遇到了一些问题。

  • JavaScriptclosure问题。
  • 如何setTimeout动态更改时间间隔。

我有一个位置数据列表,在 lacation 对象中有不同的有用属性供我在 Google 地图上呈现,例如 Lat、Lng 和 Time 等...

我想每 500 毫秒创建一个 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 次。

经过研究,可能是因为 JavaScript closure,但我不太了解它是如何工作的。我想找到一种模式来解决我的两个问题。先谢谢了。

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 回答