如何将变量设置为元素视频的事件

时间:2017-11-09 07:44:33

标签: 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.mp4");
    video.preload = 'metadata'
    video.ondurationchange = function() {
        duration = video.duration
    }

    console.log(duration)

为什么变量持续时间始终未定义?我一直在搜索谷歌,但没有找到任何解决方案。有没有人遇到类似我的问题?

2 个答案:

答案 0 :(得分:0)

问题是“ondurationchange()”是异步调用的(在添加侦听器之后的某个未定义的时间内),你在声明之后创建console.log,因此持续时间尚未定义...如果放入控制台。记录在监听器内部,当持续时间有效改变时,您将看到正确的日志

video.ondurationchange = function() {
    duration = video.duration
    console.log(duration)
}

答案 1 :(得分:0)

在将您的功能添加到console.log(duration)事件后,您直接致电ondurationchange。所以它返回undefined是正常的,它只在事件被触发至少一次时才被填充。

console.log移至duration下方的回调函数,您将看到它实际被调用的时间。此外,您的视频从不播放此代码,因此我怀疑该事件是否会被提升。