【问题标题】:How can I add a function to api_addEventListener to a Vimeo player with arguments如何将函数添加到 api_addEventListener 到带有参数的 Vimeo 播放器
【发布时间】:2014-10-21 22:23:39
【问题描述】:

我正在创建一个脚本,该脚本使用 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 和事件,但永远不会返回。 这对于在当前播放器完成播放时播放下一个播放器、在播放器播放视频时停止其他播放器等是必需的。

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;除非有必要,否则我会尽量不使用任何库。

【问题讨论】:

  • 请注意,侦听器需要一个函数,而不是函数返回的任何内容,在这种情况下为undefined

标签: javascript video youtube vimeo swfobject


【解决方案1】:

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

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

请记住,函数是对象,当您使用 () 时,您实际上是在调用函数,而不是传递它。

【讨论】:

  • 我得到了你所指出的关于 addEventListener 的内容。但是,代码没有按我的目标工作。第一个是在 vimeo_player_loaded(id) 甚至 Vimeo 播放器没有“播放”时执行其回调函数。第二个根本不起作用。我认为问题潜伏在 Vimeo 的 api 周围。
猜你喜欢
  • 2016-04-02
  • 1970-01-01
  • 1970-01-01
  • 2016-09-27
  • 2015-07-13
  • 2013-06-22
  • 2019-03-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多