Размеры видео HTML5
Я пытаюсь получить размеры видео, которое я накладываю на страницу с JavaScript, однако он возвращает размеры изображения плаката вместо фактического видео, поскольку кажется, что он вычисляется до загрузки видео.
4 ответа:
<video id="foo" src="foo.mp4"></video> var vid = document.getElementById("foo"); vid.videoHeight; // returns the intrinsic height of the video vid.videoWidth; // returns the intrinsic width of the video
спецификация: https://html.spec.whatwg.org/multipage/embedded-content.html#the-video-element
следует отметить, что в настоящее время принятое решение выше Sime Vidas фактически не работает в современных браузерах, так как свойства videoWidth и videoHeight не установлены до тех пор, пока не будет запущено событие "loadedmetadata".
Если вы запросите эти свойства достаточно далеко после того, как элемент VIDEO будет отображен, он может иногда работать, но в большинстве случаев это вернет значения 0 для обоих свойств.
чтобы гарантировать, что вы получаете правильный значения свойств вам нужно сделать что-то вроде:
var v = document.getElementById("myVideo"); v.addEventListener( "loadedmetadata", function (e) { var width = this.videoWidth, height = this.videoHeight; }, false );
примечание: Я не потрудился учитывать версии Internet Explorer до 9, которые используют attachEvent вместо addEventListener, так как версии этого браузера до 9 не поддерживают видео HTML5.
слушать
loadedmetadata
событие, которое отправляется, когда агент пользователя только что определил длительность и размеры медиаресурсараздел 4.7.10.16 сводка событий
https://www.w3.org/TR/html5/embedded-content-0.html#event-media-loadedmetadata
videoTagRef.addEventListener('loadedmetadata', function(e){ console.log(videoTagRef.videoWidth, videoTagRef.videoHeight); });
готов к использованию функции
вот готовая к использованию функция, которая возвращает размеры видео асинхронно,ничего не меняя в документе.
// ---- Definitions ----- // /** Returns the dimensions of a video asynchrounsly. @param {String} url Url of the video to get dimensions from. @return {Promise} Promise which returns the dimensions of the video in 'width' and 'height' properties. */ function getVideoDimensionsOf(url){ return new Promise(function(resolve){ // create the video element let video = document.createElement('video'); // place a listener on it video.addEventListener( "loadedmetadata", function () { // retrieve dimensions let height = this.videoHeight; let width = this.videoWidth; // send back result resolve({ height : height, width : width }); }, false ); // start download meta-datas video.src = url; }); } // ---- Usation ---- // getVideoDimensionsOf("http://clips.vorwaerts-gmbh.de/VfE_html5.mp4") .then(function(dimensions){ console.log("Video width: " + dimensions.width) ; console.log("Video height: " + dimensions.height) ; });
вот видео, используемое для фрагмента, если вы хотите его увидеть:Большой Бак Банни