大家好,请有人帮帮我。
我有一些代码如下
let duration;
let video = document.createElement('video');
video.setAttribute("id", 'test')
video.setAttribute("src", "https://vdoelearning.s3-ap-southeast-1.amazonaws.com/Charlie%2BPuth%2B-%2BOne%2BCall%2BAway.mp4");
video.preload = 'metadata'
video.ondurationchange = function() {
duration = video.duration
}
console.log(duration)
为什么变量持续时间始终未定义?我一直在搜索谷歌,但没有找到任何解决方案。有没有人遇到类似我的问题?
答案 0 :(得分:0)
问题是“ondurationchange()”是异步调用的(在添加侦听器之后的某个未定义的时间内),你在声明之后创建console.log,因此持续时间尚未定义...如果放入控制台。记录在监听器内部,当持续时间有效改变时,您将看到正确的日志
video.ondurationchange = function() {
duration = video.duration
console.log(duration)
}
答案 1 :(得分:0)
在将您的功能添加到console.log(duration)
事件后,您直接致电ondurationchange
。所以它返回undefined
是正常的,它只在事件被触发至少一次时才被填充。
将console.log
移至duration
下方的回调函数,您将看到它实际被调用的时间。此外,您的视频从不播放此代码,因此我怀疑该事件是否会被提升。