我正在尝试收集页面上所有视频的时间并将它们添加到数组中。这是代码:
var allvideos = $('video');
var times = [];
for ( i=0; i < allvideos.length; i++ ) {
allvideos[i].addEventListener('loadedmetadata', function() {
videoDuration = this.duration;
times.push(videoDuration);
});
};
如果我在EventListener中的console.log(次),它按预期工作,但如果我在for循环后记录它是空的。我无法弄清楚为什么会这样。有人可以帮忙,请解释原因吗?非常感谢。
我正在使用jQuery和Video.js。
取值
答案 0 :(得分:3)
考虑代码的执行方式:
times
数组times
数组中的值
times
数组它未在videoDuration
数组中显示times
的原因是因为times
在该时间点为空。您必须等到所有事件侦听器都被调用之后再输出数组中的值。
如果要在调用所有事件侦听器后输出数组,则可以执行以下操作:
for (var i = 0; i < allvideos.length; i++) {
allvideos[i].addEventListener('loadedmetadata', function() {
times.push(this.duration);
if (times.length === allvideos.length) {
console.log(times);
}
});
};