私はyoutubeapiを使用して、この例よりも多くのビデオを追加しています。1つのページに15、別のページに30です。ロジックは同じです
// load api
var tag = document.createElement('script');
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// make player array
var players = new Array();
function onYouTubeIframeAPIReady() {
players[0] = new YT.Player('player1', { //player1 is a div id in the html, this is how it works throughout the page
height: '405',
width: '720',
videoId: 'Sqd3jUPq3Lw',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
players[1] = new YT.Player('player2', {
height: '315',
width: '560',
videoId: 'Sqd3jUPq3Lw',
suggestedQuality: 'large',
iv_load_policy: '3',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
players[2] = new YT.Player('player3', {
height: '315',
width: '560',
videoId: 'Sqd3jUPq3Lw',
suggestedQuality: 'large',
iv_load_policy: '3',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
players[3] = new YT.Player('player4', {
height: '315',
width: '560',
videoId: 'Sqd3jUPq3Lw',
iv_load_policy: '3',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
players[4] = new YT.Player('player5', {
height: '315',
width: '560',
videoId: 'Sqd3jUPq3Lw',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
players[5] = new YT.Player('player6', {
height: '315',
width: '560',
videoId: 'Sqd3jUPq3Lw',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
players[6] = new YT.Player('player7', {
height: '315',
width: '560',
videoId: 'Sqd3jUPq3Lw',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
}
//to stop the video from playing
$(document).click( function() {
//loop players array to stop them all
$(players).each(function(i){
this.pauseVideo();
});
});
上記のコードの問題は、iframeがページに読み込まれるまでに長い時間がかかることです。これは、一部のビデオを含むモーダルウィンドウをトリガーするなど、他のJavaScriptに干渉します。
次の例では、ビデオを3つの配列に分割し、そのうちの2つはモーダルボタンイベントなどのイベントでトリガーされます。
// load api
var tag = document.createElement('script');
tag.src = "//www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
// make player array
var players = new Array();
var players2 = new Array();
var players3 = new Array();
function onYouTubeIframeAPIReady() {
players[0] = new YT.Player('player1', {
height: '405',
width: '720',
videoId: 'Sqd3jUPq3Lw',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
$('.btn-1').click( function(){
players2[0] = new YT.Player('player3', {
height: '315',
width: '560',
videoId: 'Sqd3jUPq3Lw',
suggestedQuality: 'large',
iv_load_policy: '3',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
players2[1] = new YT.Player('player4', {
height: '315',
width: '560',
videoId: 'Sqd3jUPq3Lw',
iv_load_policy: '3',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
players2[2] = new YT.Player('player5', {
height: '315',
width: '560',
videoId: 'Sqd3jUPq3Lw',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
});
$('.btn-2').click( function(){
players3[0] = new YT.Player('player7', {
height: '315',
width: '560',
videoId: 'Sqd3jUPq3Lw',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
players3[1] = new YT.Player('player8', {
height: '315',
width: '560',
videoId: 'Sqd3jUPq3Lw',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
players3[2] = new YT.Player('player9', {
height: '315',
width: '560',
videoId: 'Sqd3jUPq3Lw',
playerVars: {
'rel': 0,
'enablejsapi': 1,
'iv_load_policy': 3
}
});
});
}
$(document).click( function() {
//loop players array to stop them all
$(players).each(function(i){
this.pauseVideo();
});
$(players2).each(function(i){
this.pauseVideo();
});
$(players3).each(function(i){
this.pauseVideo();
});
});
これは実際、ロード時間をずらします。ページは非常に速く読み込まれ、モーダルには少し時間がかかりますが、ユーザーはiframeが読み込まれるまでさらに数秒待つことをいとわないように感じます。
動作しないのは、ドキュメントのクリック時にすべてのビデオを一時停止する最後の機能です(ユーザーがモーダルからクリックしたときに便利です)。皮肉なことに、ボタンクリックイベントを取り除くと、関数onYouTubeIframeAPIReadyは3つの配列すべてのiframeを作成できます。これらのクリックイベントが関数に追加されるとすぐに、pausevideo関数は失敗します。
YouTubeのドキュメントを読みましたが、解決策が見つかりませんでした。
よろしくお願いします。