Как надежно и последовательно получить расчетный стиль ширины для элемента VIDEO?

var vid = document.createElement("video");
vid.src = "big_buck_bunny_640x360.mp4";
document.getElementsByTagName("body")[0].appendChild(vid);
console.log(window.getComputedStyle(vid, null).getPropertyValue("width"));

Консоль неизменно показывает "300px", но, очевидно, я ищу значение "640px". Если я использую setTimeout в этом вызове console.log с задержкой в ​​100 миллисекунд, в консоли отобразится правильное значение "640px".

Я бы предпочел не использовать setTimeout, хотя. Есть ли "правильный" способ получить точное рассчитанное значение стиля?

2 ответа

Решение

Вы можете получить правильный videoHeight/videoWidth после событияметаданных загрузки или, если свойство readyState больше или равно 1.

Код для получения правильного значения - используя jQuery - может выглядеть так:

$('<video />')
    .appendTo('body')
    .one('loadedmetadata', function(){
        console.log( $.prop( this, 'videoHeight'), $.prop( this, 'videoWidth') );
    })
    .prop({
        'src': 'big_buck_bunny_640x360.mp4',
        'preload': 'metadata'
    })
;

Но учтите, что не все браузеры сразу начинают загружать видео.

Если вы хотите получить внутреннюю ширину и высоту элемента видео, вы должны получить videoWidth и videoHeight, Смотрите эту документацию

Другие вопросы по тегам