Javascript 如何将变量设置为元素视频的事件
你好,请任何人帮帮我 我有一些代码如下Javascript 如何将变量设置为元素视频的事件,javascript,html,asynchronous,video,Javascript,Html,Asynchronous,Video,你好,请任何人帮帮我 我有一些代码如下 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.mp
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)
为什么可变持续时间总是未定义?我一直在谷歌上搜索,但没有找到任何解决方案。有没有人遇到过与我类似的问题?问题是,在声明后生成console.log时,会异步调用“ondurationchange()”(在添加侦听器后的未定义时间内),因此持续时间尚未定义。。。如果将console.log放在侦听器中,当持续时间有效更改时,您将看到正确的日志
video.ondurationchange = function() {
duration = video.duration
console.log(duration)
}
问题在于,当您在声明之后创建console.log时,会异步调用“ondurationchange()”(在添加侦听器后的某个未定义的时间内),因此持续时间尚未定义。。。如果将console.log放在侦听器中,当持续时间有效更改时,您将看到正确的日志
video.ondurationchange = function() {
duration = video.duration
console.log(duration)
}
将函数添加到
ondurationchange
事件后,您将直接调用console.log(duration)
。因此,它返回未定义的是正常的,只有在事件至少触发一次时才会填充
将您的控制台.log
移动到duration
下的回调函数,您将看到它实际被调用的时间。另外,您的视频从未播放过此代码,因此我怀疑该事件是否会引发。您在将函数添加到ondurationchange
事件后直接调用console.log(duration)
。因此,它返回未定义的是正常的,只有在事件至少触发一次时才会填充
将您的控制台.log
移动到duration
下的回调函数,您将看到它实际被调用的时间。另外,您的视频从未播放过此代码,因此我怀疑是否会引发此事件。感谢您回答我的问题。它可能是我可以在另一个函数中调用的持续时间变量吗?因为我需要其他函数的持续时间值。谢谢你回答我的问题。它可能是我可以在另一个函数中调用的持续时间变量吗?因为我需要其他函数的duration值。thx来回答我的问题,但它可能是我可以在另一个函数中调用的duration变量吗?因为我需要其他函数的持续时间值。是的,你可以,但你需要知道你是在异步环境中工作的,所以你需要使用事件驱动的方法或一系列回调来正确处理changesthx来回答我的问题,但它可能是我可以在另一个函数中调用的持续时间变量吗?因为我需要其他函数的持续时间值。是的,您可以,但您需要知道您是在异步环境中工作的,因此您需要使用事件驱动方法或一系列回调来正确处理更改