我有一个JavaScript函数数组和延迟(以毫秒为单位):
var events = [
{event: function_1, delay: 1234},
{event: function_2, delay: 2456},
...
{event: function_n, delay: 13154}
]
和一个电影剪辑。这个想法是当电影播放时按延迟参数给出的顺序执行功能。一种方法是:
video.play();
for ( var i = 0; i < events.length; i++ ) {
setTimeout(events[i].event(), events[i].delay);
}
有没有更好的方法来保证确切的时间?
答案 0 :(得分:0)
要按顺序评估事件,您需要在每个事件后调用回调函数。在回调中,您将触发下一个事件。
events.shift()
从列表中删除第一个事件。在所有正在执行的事件结束时,事件列表将保持为空。
var events = [
{ event: function_1, delay: 1000 },
{ event: function_2, delay: 2000 },
{ event: function_n, delay: 10100 }
];
function triggerEvents(events) {
if(events.length === 0) {
// all events completed
return;
}
// get the first event from list
var event = events.shift();
setTimeout(function () {
event.event(function () {
startEvents(events);
});
}, event.delay);
};
答案 1 :(得分:0)
您可以将setTimeout
与递归一起使用。
注意:我假设延迟以固定方式增加。
var refresh_count = 0;
var delay = 1000;
var events = [
{ event: notify.bind(this, "test") },
{ event: notify.bind(this, "foo") },
{ event: notify.bind(this, "Hello World")}];
function notify(str) {
console.log(str);
}
function initTimeout() {
setTimeout(function() {
if (events[refresh_count]) {
events[refresh_count++].event();
initTimeout();
}
}, delay + (refresh_count * 1000));
}
initTimeout();