Невозможно получить продолжительность видео вне функции addEventListener - PullRequest
0 голосов
/ 06 июня 2018

У меня есть функция, которая записывает продолжительность видео в консоль до его загрузки.Однако я не могу получить длительность видео вне функции addEventListener, потому что она возвращает NaN.Несмотря на это, внутри функции он успешно записывает правильную продолжительность видео, но если я сохраню его в переменной, он не получит правильное значение.

Функция продолжительности видео

var duration = 0; // Set default variable for storing video duration
if(vfile.type == "video/webm" || vfile.type == "video/mp4" || vfile.type == "video/ogg" || vfile.type == "video/mov"){
        var video = document.createElement('video'); // Create video element
        video.preload = 'metadata'; // Set preload attribute to metadata
        window.URL.revokeObjectURL(video.src);
        video.addEventListener('durationchange', function() { // Check for duration
            console.log('Duration change', video.duration); // Successfully logs video duration into console e.g.: 13.012
            duration = video.duration; // Set duration variable to video.duration
        });
        console.log("Duration: ", duration); // Returns back 0
    }
    video.src = URL.createObjectURL(vfile);

Если я устанавливаю переменную duration на video.duration вне функции addEventListener, это возвращает NaN.
В общем, как я могу установить для переменной duration фактическую продолжительность видео на потом?использование в скрипте?

1 Ответ

0 голосов
/ 06 июня 2018

Вы присваиваете видео.duration длительность в этом коде:

    video.addEventListener('durationchange', function() { // Check for duration
        console.log('Duration change', video.duration); // Successfully logs video duration into console e.g.: 13.012
        duration = video.duration; // Set duration variable to video.duration
    });
    console.log("Duration: ", duration); // Returns back 0

Проблема в том, что console.log("Duration: ", duration); запускает до duration = video.duration;, потому что video.addEventListener не сразузапустить свою функцию.Если вам нужно что-то сделать с длительностью, вы можете запустить ее после назначения длительности, например, так:

    video.addEventListener('durationchange', function() { // Check for duration
        duration = video.duration; // Set duration variable to video.duration
        someOtherFunction();
    });

Вы также можете использовать один из других методов асинхронного управления данными: https://stackoverflow.com/a/14220323/6184972

...