1

내 사이트에서 회전하는 여러 YouTube 동영상이 있습니다. 사용자가 YouTube 비디오를 클릭하면 회전 목마의 자동 스크롤을 중지하고 싶습니다. 다음은 나를 쓰고있는 코드입니다. "players [player_id] .getPlayerState()는 함수가 아닙니다." 오류.Youtube iframe api "getPlayerState"function undefined

또한 youtube 라이브러리가 제 3 자 자바 스크립트에서 내 사이트에로드됩니다.

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') '와 같은 동영상의 ID를 전달합니다. – savithraj

+0

어떻게 해결 했습니까? 타사 스크립트에서 YouTube Iframe API를로드하고 "정의되지 않은"메소드를 얻는 것과 같은 문제가 있다고 생각합니다 (실제로 모든 객체 멤버가 한 문자로 맹 글링됩니다). –

답변

2

videoId: $(this).attr('id')events 과 같은 샘플 매개 변수를 잊어 버렸습니다.

HTML

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

자바 스크립트 :

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

라이브 데모 : http://jsbin.com/nisetafoga/1/edit?html,js,console,output

+0

답변 해 주셔서 감사합니다. youtube 비디오가 이미 내 사이트에로드되어 있기 때문에 전달 된 동영상 ID가 없습니다. 제 3 자 자바 스크립트가 내 사이트에서로드하기 때문에 youtube 라이브러리를로드하지 않았습니다. 내 문제는 내가 youtube 비디오를 클릭하면 onPlayerStateChange 함수가 발생하지만 insDie는 getPlayerState() 함수가 정의되지 않은 것을 던지는 것입니다. 심지어 event.target.getVideoUrl()을 출력하려고 할 때 함수가 정의되지 않았 음을 보여줍니다. – savithraj

+0

@savithraj는 코드를 작성하는 방법을 이해하기 어렵고 생생한 글을 게시합니다. – mpgn