【问题标题】:Youtube iframe api "getPlayerState" function undefinedYoutube iframe api“getPlayerState”函数未定义
【发布时间】:2015-01-29 22:18:35
【问题描述】:

在我的网站上以轮播形式播放了多个 youtube 视频。当用户点击 youtube 视频时,我想停止轮播的自动滚动。这是我正在编写的代码,它抛出了 "players[player_id].getPlayerState() is not a function" 错误。

另外,youtube 库正在从第三方 javascript 加载到我的网站中。

玩家 = {};

    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.
            }
        }
    }

如果您能在我的代码中找到问题,请告诉我。提前致谢!

【问题讨论】:

  • 添加html代码?你在哪里通过视频的ID?什么时候播放视频?
  • 我正在传递视频的 id,例如“$(this).attr('id')”。
  • 你是如何解决这个问题的?我想我遇到了同样的问题,从第三方脚本加载 YouTube Iframe API 并获取“未定义”方法(实际上所有对象成员都被修改为一个字母的名称)。

标签: youtube-api youtube-javascript-api youtube-iframe-api


【解决方案1】:

您忘记了一些示例参数,例如 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);
            }
        };
    }

现场演示:http://jsbin.com/nisetafoga/1/edit?html,js,console,output

【讨论】:

  • 感谢您的回复。我没有传递视频 ID,因为 youtube 视频已经加载到我的网站中。而且我还没有加载 youtube 库,因为第三方 javascript 正在我的网站中加载它。我的问题是,当我单击 youtube 视频时,会触发 onPlayerStateChange 函数,但它正在抛出 getPlayerState() 函数是未定义的。即使当我尝试输出 event.target.getVideoUrl() 时,它也显示该函数未定义。
  • @savithraj 发布了一个很难理解的实时代码
猜你喜欢
  • 2015-03-24
  • 2013-12-22
  • 2011-07-14
  • 2013-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-08
  • 1970-01-01
相关资源
最近更新 更多