我搜索了 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(player).api('pause'); 在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 教会了我很多东西。