Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/468.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何将变量设置为元素视频的事件_Javascript_Html_Asynchronous_Video - Fatal编程技术网

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来回答我的问题,但它可能是我可以在另一个函数中调用的持续时间变量吗?因为我需要其他函数的持续时间值。是的,您可以,但您需要知道您是在异步环境中工作的,因此您需要使用事件驱动方法或一系列回调来正确处理更改