如何向带有参数的Vimeo播放器添加api_addEventListener函数

时间:2014-08-28 06:41:30

标签: javascript video youtube vimeo swfobject

我正在创建一个脚本,使用swfobject在同一页面上创建和播放YouTube和Vimeo的多个视频。此脚本在页面上创建一个控制器,允许用户播放,暂停,停止等。我已经成功地在同一页面上创建了YouTube播放器和Vimeo播放器,并通过控制器上的按钮控制播放器。

我正在堆叠的是向玩家添加api_addEventListener。我成功地将api_addEventListener添加到从Vimeo播放器触发的事件并执行其回调函数,我在下面的问题中回答。 (How do I add an event listener?

但是,我无法弄清楚在api_addEventListener中为函数添加参数的方法。根据这个页面(http://developer.vimeo.com/player/js-api),如果我没有弄错,Vimeo的所有事件都会返回player_id和event,但永远不会返回。 这对于在当前玩家完成比赛时播放下一个玩家,在玩家正在播放视频时停止其他玩家等等是必要的。

function vimeo_player_loaded(id){
    var vimeo_player = document.getElementById(id);
    vimeo_player.api_addEventListener('play', vimeo_play(id, eventName));
    vimeo_player.api_addEventListener('pause', vimeo_pause(id, eventName));
    vimeo_player.api_addEventListener('finish', vimeo_finish(id, eventName));
}
function vimeo_play(id, eventName){
    console.log("Video is playing. id : " + id + " event: " + eventName);
}
function vimeo_pause(id, eventName){
    console.log('Video is paused. id :'  + id + " event: " + eventName);
}
function vimeo_finish(id, eventName){
    console.log('Video finished. id :'  + id + " event: " + eventName);
}

英语不是我的第一语言。对不起,如果难以理解。

PS;除非有必要,否则我尝试不为此脚本使用任何库。

1 个答案:

答案 0 :(得分:0)

监听器需要一个函数,但是你没有传递一个函数,你正在执行它。您有几个选项,一个是让您的函数返回另一个需要事件参数的函数:

function vimeo_play(id) {
  return function(eventName) {
    console.log("Video is playing. id : " + id + " event: " + eventName);
  }
}

你用id调用函数,它将返回监听器所期望的函数:

vimeo_player.api_addEventListener('play', vimeo_play(id));
// same with the others

另一种选择是保持你的功能不变,并使用bind部分应用id参数,这样你就可以得到一个等待事件的函数:

vimeo_player.api_addEventListener('play', vimeo_play.bind(null, id));
// same with the others

请记住,函数是对象,当你使用()实际调用函数时,它不会传递它。