javascript:无法让setTimeout正常工作

时间:2014-02-02 02:36:04

标签: javascript loops timeout maps leaflet

我在地图上有一个带有传单的对象数组。 我想让我的地图在一段时间后平移到每个物体上。

var idx = 0;
function getNextPoint(point) {
  console.log(idx);
  map.panTo(new L.LatLng(point.y,point.x), true, 1, 0.5);
  idx++;
  if (idx < points.length) {
    setTimeout(getNextCenter(points[idx]), 4000);
  }
}

setTimeout(getNextPoint(points[idx]), 4000);

所以我希望这段代码在4s后执行getNextPoint(),平移到第一点,然后设置下一个超时,然后在4s之后再次执行该方法,直到达到idx max。

但这不是它正在做的事情。它会快速遍历所有点,只会产生一个可见的平底锅。

我做错了什么?

2 个答案:

答案 0 :(得分:3)

尝试将超时功能包装在另一个功能中:

setTimeout(function() {
    getNextPoint(points[idx]);
}, 4000);

答案 1 :(得分:2)

将函数传入setTimeout时,请勿使用()调用它。只需输入名称即可。

function print () {
  console.log('hello!')
}
setTimeout(print, 4000);

在您的情况下,您还希望将其他参数传入getNextPoint。在现代浏览器(look at MDN for compatability)中,您可以将它们传递给setTimeout

setTimeout(getNextPoint, 4000, points[idx])

要支持所有浏览器,您可以使用bind将参数绑定到函数中。

setTimeout(getNextPoint.bind(null, points[idx]), 4000)