2017-08-29 61 views
0

看看这样:控制台显示不同的视频客户端宽度

https://jsfiddle.net/udr2m3xn/1/

这是HTML

<video> 
    <source src="https://www.w3schools.com/html/mov_bbb.mp4" type="video/mp4"> 
</video> 

这是JS

var video = document.querySelector('video'); 
var vw = video.clientWidth; 

console.log('Client width: ' + vw); 
console.dir(video); 

视频是320x176 PX。但是,vw变量输出300(它应该是320)。但是,当你检查视频属性,你可以看到,它说,该客户端宽度为320

Chrome dev tools

这是一个调试或者我失去了一些东西?提前致谢!

+0

如果使用setTimeout()将超时时间为1000ms的控制台日志打包,您会看到什么? – Nijikokun

+0

@Nijikokun同样https://jsfiddle.net/udr2m3xn/2/ – nick

+0

看起来我被秒掉了,问题是视频必须被加载到内存中。然后你会看到正确的视频大小:) – Nijikokun

回答

2

你应该等待视频的元数据,以试图访问变量,使用loadedmetadata事件之前加载是确定性(意思是给定相同/不同的输入输出没有按” t表现出不同的行为),而setTimeout是非确定性的。

video.addEventListener("loadedmetadata", function() { 
    console.log(video.clientWidth) 
}, true) 

我建议检查出的events的完整列表,因为可能有其他人,你会发现有用!

0

300是<video>元素的默认宽度。 JS在视频有时间加载之前执行,并设置元素的合适宽度。如果你将你的JS包装在setTimeout()中,你会看到正确的宽度。亲身体验:

https://jsfiddle.net/udr2m3xn/3/

相关问题