YT_ready
、getFrameID
およびは、この回答onYouTubePlayerAPIReady
で定義されている関数です。どちらの方法も、プリロードされたライブラリなしで実装できます。以前の回答では、単一フレームの機能を実装する方法を示しました。
この回答では、複数のフレームに焦点を当てています。
HTMLサンプルコード(重要なタグと属性は大文字になっています<iframe src id>
):
<div>
<img class='thumb' src='http://i2.cdnds.net/11/34/odd_alan_partridge_bio_cover.jpg'>
<IFRAME ID="frame1" SRC="http://www.youtube.com/embed/u1zgFlCw8Aw?enablejsapi=1" width="640" height="390" frameborder="0"></IFRAME>
</div>
<div>
<img class='thumb' src='http://i2.cdnds.net/11/34/odd_alan_partridge_bio_cover.jpg'>
<IFRAME ID="frame2" SRC="http://www.youtube.com/embed/u1zgFlCw8Aw?enablejsapi=1" width="640" height="390" frameborder="0"></IFRAME>
</div>
JavaScriptコード(、、YT_ready
およびgetFrameID
YouTube Frame APIスクリプトローダーはここで定義さonYouTubePlayerAPIReady
れます)
var players = {}; //Define a player storage object, to expose methods,
// without having to create a new class instance again.
YT_ready(function() {
$(".thumb + iframe[id]").each(function() {
var identifier = this.id;
var frameID = getFrameID(identifier);
if (frameID) { //If the frame exists
players[frameID] = new YT.Player(frameID, {
events: {
"onReady": createYTEvent(frameID, identifier)
}
});
}
});
});
// Returns a function to enable multiple events
function createYTEvent(frameID, identifier) {
return function (event) {
var player = players[frameID]; // Set player reference
var the_div = $('#'+identifier).parent();
the_div.children('.thumb').click(function() {
var $this = $(this);
$this.fadeOut().next().addClass('play');
if ($this.next().hasClass('play')) {
player.playVideo();
}
});
}
}
以前の回答では、onStateChange
イベントをバインドしました。この例ではonReady
、初期化時に関数を1回だけ呼び出したいので、イベントを使用しました。
この例は次のように機能します。
この回答のコア機能はそれに基づいているため、この回答も必ず確認してください。
その他のYouTubeFrameAPIの回答。これらの回答では、YouTube Frame /JavaScriptAPIのさまざまな実装を示しました。