Мне просто нужно было сделать это для проекта, в котором у меня было встроенное видео на YouTube, центрированное на странице поверх фонового изображения, которое было настроено на отображение 100vh x 100vh, за исключением небольшого пространства для заголовка и панели stickynav. Было важно, чтобы видео на YouTube не только масштабировалось, но и сохраняло 30-пиксельное поле снизу изображения.
Поэтому я устанавливаю размер фонового изображения при загрузке страницы относительно размера окна и определяю размеры iframe в функции onYouTubeIframeAPIReady, которая вызывается API Youtube только после загрузки фрейма. У меня также есть та же функция при изменении размера окна, так что она будет плавно масштабироваться, если вы измените размер окна браузера.
Так как вертикальное поле было важной проблемой, я начал с высоты, установив высоту фрейма на основе высоты фонового изображения минус пространство, необходимое для полей. Затем я вручную вычислил соотношение сторон 16: 9 для ширины, разделив высоту на 9 и умножив на 16.
$( document ).ready(function() {
var content = $('#hero');
var contentH = $(window).height() - 158;
var contentW = $(window).width();
content.css('height',contentH);
} );
$(window).resize(function() {
var content = $('#hero');
var iframe = $('.videoWrapper iframe');
var contentH = $(window).height() - 158;
var iframeH = contentH - 150;
content.css('height',contentH);
iframe.css('height',iframeH);
var iframeW = iframeH/9 * 16;
iframe.css('width',iframeW);
var margin = ($(window).width() - iframeW) / 2;
$('.videoWrapper').style.marginLeft = margin;
} );
<div id="hero">
<div class="container">
<div class="row-fluid">
<hgroup class="span12 text-center" role="heading">
<h1></h1>
<h2></h2>
</hgroup>
<script src="https://www.youtube.com/iframe_api"></script>
<center>
<div class="videoWrapper">
<div id="player"></div>
</div>
</center>
<script>
var player;
function onYouTubeIframeAPIReady() {
player = new YT.Player('player', {
videoId:'xxxxxxxxx',playerVars: {
controls:0,enablejsapi:1,iv_load_policy:3
}
} );
var content = $('#hero');
var iframe = $('.videoWrapper iframe');
var contentH = $(window).height() - 158;
var contentW = $(window).width();
var iframeH = contentH - 150;
iframe.css('height',iframeH);
var iframeW = iframeH/9 * 16;
iframe.css('width',iframeW);
}
</script>
</div>
</div>
</div>