我正在创建一个脚本,使用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;除非有必要,否则我尝试不为此脚本使用任何库。
答案 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
请记住,函数是对象,当你使用()
实际调用函数时,它不会传递它。