YouTubeをAPIを使って多数配置ときに、下の方にあるYouTubeを全画面モードにしてから戻るとページの位置がずれているときがありました。
サンプルコード
最初にやろうとしていたコードです。
HTML
<div id="contents"></div>
CSS
#contents {
padding-bottom: 300px;
}
#list {
width: 640px;
margin: 0 auto;
}
#list li {
margin: 80px auto;
}
JavaScript
YouTubeを埋め込むエリアを作成して、その中にAPIを使ってYouTubeを埋め込みます。
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// 各プレーヤーの格納
var ytPlayer = [];
// プレーヤーのサイズ
var ytWidth = 640;
var ytHeight = 390;
var ytData = [
'ZDqeCyUwnO8',
'KN9Go6ZeGiQ',
'f5Sy_ld8MHA',
'QtG2ZMvJNZo',
'JpEaUKQVE00',
'WOy3WbcbNtQ',
'MG9tWDy6Hmc',
'rblaPG33Hnk',
'qYrOgbgX69M',
'BeHvEt1vASE'
];
// YouTube埋め込みエリアの作成
var insert = '<ul id="list">';
for (var i = 0; i < ytData.length; i++) {
insert += '<li>';
insert += '<div id="movie' + i + '"></div>';
insert += '</li>';
};
insert += '</ul>';
document.getElementById('contents').innerHTML = insert;
// 各プレーヤーの埋め込み
function onYouTubeIframeAPIReady() {
for(var i = 0; i < ytData.length; i++) {
ytPlayer[i] = new YT.Player(('movie' + i), {
width: ytWidth,
height: ytHeight,
videoId: ytData[i]
});
}
}
デモページ一番下のYouTubeを再生後、右下にある全画面ボタンをクリックします。

全画面モードに変更後、右下のボタンで全画面モードを終了します。

元の画面に戻ると、今見ていたYouTubeが下の方に移動してしまっています。

今回の場合は一部見えているのでまだいいですが、場合によっては再生しているYouTubeが完全に画面外になってしまうこともありました。
対応方法
YouTube埋め込み後に、#listに対してmin-heightで高さを指定すると対応できました。
JavaScript
var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// 各プレーヤーの格納
var ytPlayer = [];
// プレーヤーのサイズ
var ytWidth = 640;
var ytHeight = 390;
var ytData = [
'ZDqeCyUwnO8',
'KN9Go6ZeGiQ',
'f5Sy_ld8MHA',
'QtG2ZMvJNZo',
'JpEaUKQVE00',
'WOy3WbcbNtQ',
'MG9tWDy6Hmc',
'rblaPG33Hnk',
'qYrOgbgX69M',
'BeHvEt1vASE'
];
// YouTube埋め込みエリアの作成
var insert = '<ul id="list">';
for (var i = 0; i < ytData.length; i++) {
insert += '<li>';
insert += '<div id="movie' + i + '"></div>';
insert += '</li>';
};
insert += '</ul>';
document.getElementById('contents').innerHTML = insert;
// 各プレーヤーの埋め込み
function onYouTubeIframeAPIReady() {
for(var i = 0; i < ytData.length; i++) {
ytPlayer[i] = new YT.Player(('movie' + i), {
width: ytWidth,
height: ytHeight,
videoId: ytData[i]
});
}
document.getElementById('list').style.minHeight = document.getElementById('list').clientHeight + 'px';
}
先ほどと同じように全画面モードに変更します。

右下のボタンから全画面モードを終了します。

元の画面に戻っても、YouTubeが全画面モード変更前の位置にあるようになりました。

原因はよく分かりませんが、全体を覆っている要素に高さを指定しておかないと、全画面モードから戻った時にずれることがあるみたいです。
コメントが承認されるまで時間がかかります。