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

Posted

技术标签:

【中文标题】如何将函数添加到 api_addEventListener 到带有参数的 Vimeo 播放器【英文标题】:How can I add a function to api_addEventListener to a Vimeo player with arguments 【发布时间】: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 【参考方案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 周围。

以上是关于如何将函数添加到 api_addEventListener 到带有参数的 Vimeo 播放器的主要内容,如果未能解决你的问题,请参考以下文章

如何使用数组将带有数据的行添加到html表中,函数部分工作

如何将redshift jdbc驱动程序添加到aws lambda函数

如何将 useUnifiedtopology 属性添加到 MongoClient 构造函数

如何将自定义按钮添加到调用 JavaScript 函数的工具栏?

如何将 querySelectorAll() 函数添加到 IE <= 7 的 Element?

如何将表头添加到使用 jQuery 中的 getJSON() 函数创建的 html 表中