YouTube API Target(wiele) istniejące iframe (y)
Próbuję zrozumieć, jak kierować istniejącą ramkę iframe za pomocą interfejsu API YouTube (tzn. bez konstruowania ramki iframe ze skryptem).
Jak zwykle, Google nie podaje wystarczającej ilości przykładów API, ale wyjaśnia, że jest to możliwe, tutaj http://code.google.com/apis/youtube/iframe_api_reference.html
Oto przykład tego, co próbuję zrobić-filmik pod miniaturką powinien się odtworzyć. Jestem prawie na miejscu, ale tylko pierwszy filmik sztuki...
1 answers
TL;DR: DEMO: http://jsfiddle.net/KtbYR/5 /
YT_ready
, getFrameID
and onYouTubePlayerAPIReady
are functions as defined in ta odpowiedź. Obie metody mogą być zaimplementowane bez fabrycznie załadowanej biblioteki. W mojej poprzedniej odpowiedzi pokazałem metodę implementacji funkcji dla pojedynczej klatki.
W tej odpowiedzi skupiam się na wielu klatkach.
Przykładowy kod HTML (Ważne znaczniki i atrybuty są pisane wielkimi literami, <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>
Kod JavaScript (YT_ready
, getFrameID
, onYouTubePlayerAPIReady
i YouTube Frame API script loader są zdefiniowane tutaj)
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();
}
});
}
}
W mojej poprzedniej odpowiedzi związałem Zdarzenie onStateChange
. W tym przykładzie użyłem zdarzenia onReady
, ponieważ chcemy wywołać funkcje tylko raz, przy inicjalizacji.
Ten przykład działa w następujący sposób:
-
Poniższe metody są zdefiniowane w tej odpowiedzi .
- The YouTube Frame API jest ładowany z http://youtube.com/player_api.
- po zakończeniu wczytywania zewnętrznego skryptu wywoływany jest
onYoutubePlayerAPIReady
, który z kolei uaktywnia wszystkie funkcje zdefiniowane za pomocąYT_ready
-
Deklaracja poniższych metod jest tutaj pokazana, ale zaimplementowana przy użyciu tej odpowiedzi . Wyjaśnienie na podstawie przykładu:
- pętli przez każdy
<iframe id>
obiekt, który jest umieszczony tuż po<.. class="thumb">
. - przy każdym elemencie ramki,
id
jest pobierany i przechowywany w zmiennejidentifier
. - wewnętrzny identyfikator ramki iframe jest pobierany przez
getFrameID
. Zapewnia to, że<iframe>
jest poprawnie sformatowany dla API. W tym przykładowym kodzie zwracany identyfikator jest równyidentifier
, ponieważ do<iframe>
dołączyłem już identyfikator. - gdy istnieje
<iframe>
i poprawny film z YouTube, powstaje nowa instancja odtwarzacza, a Referencja jest przechowywana wplayers
obiekt, dostępny za pomocą kluczaframeID
.
Podczas tworzenia instancji gracza definiowane jest Zdarzenie **
onReady
*. Ta metoda zostanie wywołana, gdy API jest w pełni zainicjalizowane dla ramki. - pętli przez każdy
-
createYTEvent
Metoda ta zwraca dynamicznie utworzoną funkcję, która dodaje funkcjonalność dla poszczególnych graczy. Najważniejsze części kodu to:function createYTEvent(frameID, identifier) { return function (event) { var player = players[frameID]; // Set player reference ... player.playVideo(); } }
-
frameID
jest identyfikatorem ramki, używanym do włączania ramki YouTube API . -
identifier
jest identyfikatorem zdefiniowanym wYT_ready
, niekoniecznie elementem<iframe>
.getFrameID
spróbuje znaleźć najbliższą pasującą ramkę dla danego id. Oznacza to, że zwraca ID danego elementu<iframe>
, lub: jeśli dany element nie jest<iframe>
, funkcja szuka potomka, który jest<iframe>
i zwraca ID tej ramki. Jeśli ramka nie istnieje, funkcja postfix podanego identyfikatora przez-frame
. - players [playerID] ' odnosi się do zainicjowanego gracza przykład.
-
Upewnij się, że również sprawdź tę odpowiedź , ponieważ podstawowa funkcjonalność tej odpowiedzi opiera się na tym.
Inne odpowiedzi API YouTube Frame . W tych odpowiedziach pokazałem różne implementacje YouTube Frame / JavaScript API.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 11:54:19