我在地图上有一个带有传单的对象数组。 我想让我的地图在一段时间后平移到每个物体上。
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。
但这不是它正在做的事情。它会快速遍历所有点,只会产生一个可见的平底锅。
我做错了什么?
答案 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)