1

Есть несколько видеороликов YouTube, которые играют на моем сайте в карусели. Когда пользователь нажимает на видео youtube, я хочу остановить автоматическую прокрутку карусели. Вот код, который я пишу, который бросает меня «Игроки [player_id] .getPlayerState() не является функцией« ошибка.Youtube iframe api "getPlayerState" функция undefined

Также библиотека youtube загружается на моем сайте с триггерного javascript.

players = {};

window.onYouTubeIframeAPIReady = function(){ 
     $('.youtube-video iframe').each(function() { 
      players[$(this).attr('id')] = new YT.Player($(this).attr('id'), { 
       events: { 
        'onStateChange': onPlayerStateChange($(this).attr('id')) 
       } 
      }); 
     }); 

    } 

    function onPlayerStateChange(player_id){ 
     return function(event) { 
      if(players[player_id].getPlayerState() == 3 ||players[player_id].getPlayerState() == 1) { 
       //stop the auto scrolling 
      } 

      if(players[player_id].getPlayerState() == 0 || players[player_id].getPlayerState() == 2) { 
       //start auto scrolling. 
      } 
     } 
    } 

Пожалуйста, дайте мне знать, если вы найдете эту проблему в моем коде. Заранее спасибо!

+0

добавить HTML-код? где вы передали идентификатор видео? когда вы воспроизводите видео? – mpgn

+0

Я передаю идентификатор видео как «$ (this) .attr ('id')". – savithraj

+0

Как вы это решили? Я думаю, что у меня такая же проблема, загружая API-интерфейс YouTube Iframe из стороннего скрипта и получая «неопределенные» методы (на самом деле все члены объекта искажены однобуквенными именами). –

ответ

2

Вы забыли некоторые образцы параметров, такие как videoId: $(this).attr('id') и events не были размещены в хорошем месте.

Я отправляю вам правильный код:

HTML

<div class="youtube-video" id="O1RHkPGb31Q"></div> 
    <div class="youtube-video" id="VjRb3RjqncQ"></div> 

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); 

players = {}; 
window.onYouTubeIframeAPIReady = function(){ 
     $('.youtube-video').each(
    function() { 
    players[$(this).attr('id')] = new YT.Player($(this).attr('id'), 
    { 
     videoId: $(this).attr('id'), 
     events: { 'onStateChange': onPlayerStateChange($(this).attr('id')) } 
    }); 
    }); 
}; 

    function onPlayerStateChange(player_id){ 
     return function(event) { 
      if(players[player_id].getPlayerState() == 3 || players[player_id].getPlayerState() == 1) { 
       //stop the auto scrolling 
       console.log("stop scolling video" + player_id); 
      } 

      if(players[player_id].getPlayerState() == 0 || players[player_id].getPlayerState() == 2) { 
       //start auto scrolling. 
       console.log("start scolling video" + player_id); 
      } 
     }; 
    } 

Live Demo: http://jsbin.com/nisetafoga/1/edit?html,js,console,output

+0

Спасибо за ваш ответ. Я не передал идентификатор видео, потому что видео YouTube уже загружено на моем сайте. и я не загрузил библиотеку youtube, потому что сторонний javascript загружает ее на моем сайте. Моя проблема в том, что когда я нажимаю на видео с YouTube, функция onPlayerStateChange запускается, но insdie, что он бросает функцию getPlayerState(), не определен. Даже когда я пытаюсь вывести event.target.getVideoUrl(), он показывает, что функция не определена. – savithraj

+0

@savithraj Опубликовать вживую, трудно понять, как вы строите свой код – mpgn

 Смежные вопросы

  • Нет связанных вопросов^_^