我有一个Tumblr主题,启用了响应式设计,并希望调整视频iframe的大小。以下是页面HTML的外观示例:
/* rest of blog */
<div id="box-content">
/* other posts; may contain more video posts */
<div class="post video">
<iframe src="[REDACTED]"
style="display:block;background-color:transparent;overflow:hidden"
class="embed_iframe tumblr_video_iframe"
scrolling="no" frameborder="0"
data-can-gutter="" data-can-resize=""
data-width="500" data-height="500"
width="500" height="500" allowfullscreen=""
mozallowfullscreen="" webkitallowfullscreen="">
</iframe>
<div class="post-content">
/* post content */
</div>
</div>
/* other posts; may contain more video posts */
</div>
/* rest of blog */
我有这个功能(我认为;我从未真正学过JavaScript)在iframe中存储iframe的原始宽度和高度,以及父项的宽度,并更改iframe的宽度和高度。
我想要的方法是
每个人都有一个子iframe元素。将以下各项存储在其变量中:
一个。那个iframe的原始宽度(ow), 湾那个iframe的原始高度(哦),和 C。父元素的宽度(容器宽度为cw)
将iframe的宽度设置为cw。
......并且没有工作的功能是:
function resizeVideos() {
var videoPostNodeList = document.getElementsByClassName("video");
for (var i = 0; i < videoPostNodeList.length; i++) {
var videoNode = videoPostNodelist[i].getElementsByTagName("iframe")[0];
var ow = videoNode.offsetWidth;
var oh = videoNode.offsetHeight;
var cw = videoPostNodelist[i].offsetWidth;
videoNode.offsetWidth = cw;
videoNode.offsetHeight = oh * cw / ow;
}
}
resizeVideos();
window.addEventListener("resize", resizeVideos);
此主题的当前版本可在testing-html.tumblr.com获得,我目前有三个视频:一个方形视频,一个水平宽屏视频和一个垂直宽屏视频。我用这个做了什么业余错误?
答案 0 :(得分:2)
元素的offsetWidth
和offsetHeight
是对可见内容的衡量,包括元素的边框,填充,滚动条(如果存在&amp;渲染)和CSS宽度
您还有其他选择,例如clientWidth
和clientHeight
和scrollWidth
以及scrollHeight
(遗憾的是MDN上没有良好的形象)
根据您对所需内容的说明,我建议您应根据ow
和oh
属性设置scrollWidth
和scrollHeight
。
如果我理解正确的情况,最好的选择可能是设置元素max-width
和max-height
CSS属性(尽管您可能更喜欢直接覆盖width
和height
):
function resizeVideos() {
var videoPostNodeList = document.getElementsByClassName("video");
for (var i = 0; i < videoPostNodeList.length; i++) {
var videoNode = videoPostNodelist[i].getElementsByTagName("iframe")[0];
var ow = videoNode.scrollWidth;
var oh = videoNode.scrollHeight;
var cw = videoPostNodelist[i].offsetWidth;
videoNode.style.maxWidth = cw;
videoNode.style.maxHeight = oh * cw / ow;
}
}
最后,等到内容加载后再运行它(和之前一样,在窗口调整大小时运行它):
document.addEventListener("DOMContentLoaded", resizeVideos);
window.addEventListener("resize", resizeVideos);
有关详细信息,请参阅MDN上的Determining the dimensions of elements。