Froogaloop Vimeo API - 无法在Ready事件之外调用API方法

时间:2013-11-20 08:44:52

标签: javascript vimeo-api froogaloop vimeo-player

我已经搜索了SO和Vimeo中的文档,似乎无法弄清楚如何在Vimeo中的Ready事件之外调用API方法。我创建了我的Vimeo播放器,将其嵌入teacher.js:

    $(".video-player").prepend('<iframe id="player" src="//player.vimeo.com/video/'+video_id+'?api=1&player_id=player&badge=0&title=0&byline=0&portrait=0" width="100%" height="100%" frameborder="0" webkitallowfullscreen mozallowfullscreen allowfullscreen></iframe>');

    player = $('iframe#player')[0];
    vimeoSetup(player);

然后在另一个脚本中调用vimeoSetup:

function vimeoSetup (player) {
$f(player).addEvent('ready', ready);

  function addEvent(element, eventName, callback) {
    if (element.addEventListener) {
      element.addEventListener(eventName, callback, false);
    }
    else {
      element.attachEvent('on'+eventName, callback);
    }
  }

  function ready(player_id) {
    // Keep a reference to Froogaloop for this player
    container = document.getElementById(player_id).parentNode.parentNode;
    froogaloop = $f(player_id);    
    var buttons = container.querySelector('div#video-player-controls-holder-teacher div'),
    playBtn = document.querySelector('#play-pause');

   //play-pause -- I wanted to have a single play-pause button, which is working fine
    addEvent(playBtn, 'click', function() {
      froogaloop.api('paused', function(paused) {
        if(paused) {
            froogaloop.api('play');
        } else {
            froogaloop.api('pause');
        }
      });
    });
    ...

现在,如果我想说叫$ f(播放器).api('暂停');在teacher.js中,我收到此错误:无法将消息发布到http://player.vimeo.com。收件人起源于mydomain。这似乎是一个简单的问题 - 我不确定它是否涉及使用目前超出我的'this',或者如果我抓住Vimeo播放器嵌入不正确 - 我确实得到了很多“没有方法.api为这个对象“在实验中。

最终目标是我可以创建一个vimeo播放器,提供控件(这两者都很好),然后使用API​​调用提供给骨干的方法,包括暂停,播放和时间。

除了“点击”和我可以使用的用户生成的事件之外,还有其他事件吗?就像一个事件,说另一个功能被称为?似乎迂回......我的骨干视图看起来像这样:

    pause: function () {
     this.player.pauseVideo(); //this is for a YouTube API which works great
     //I want to be able to similarly call something like froogaloop.api('pause');
    },

非常感谢 - StackOverflow给了我很多惊喜。

1 个答案:

答案 0 :(得分:0)

因此,如果'ready'事件有效,那么一切都必须正确设置。但这是一个可能的问题 在:

player = $('iframe#player')[0];
vimeoSetup(player);

您将按Object获取'player',然后在vimeoSetup(player);中将Object传递给正在运行的$f(player)
然而,在ready函数的代码中,您传递给$f(player_id)id,而不是Object,因此api调用无效。

您只需要Object再次获取player_id并将其传递到$f(),或将player = $('iframe#player')[0];保存为全局var,然后调用所有API方法在它上面(虽然可能不是一个好的选择,如果你想做一些像恐怖产生的玩家每个人都有自己的控制,或者如果你只是其中一个,谁害怕全局变量)