Javascript 如何区分代码调用的操作侦听器和用户调用的操作侦听器?
我正在使用Youtube Iframe Javascript API开发一个应用程序。我必须根据另一个应用程序(称为调用应用程序)的输入播放或暂停视频。我还必须从这个Youtube播放器获得更新(无论它是被播放还是暂停),并更新调用应用程序 现在的问题是如何区分YouTube播放器是由用户操作播放还是基于调用应用程序的输入播放。因为它们都调用了动作侦听器。当由调用应用程序播放时,我不希望调用应用程序再次更新 例如: 案例1:Javascript 如何区分代码调用的操作侦听器和用户调用的操作侦听器?,javascript,video,youtube-javascript-api,event-listener,Javascript,Video,Youtube Javascript Api,Event Listener,我正在使用Youtube Iframe Javascript API开发一个应用程序。我必须根据另一个应用程序(称为调用应用程序)的输入播放或暂停视频。我还必须从这个Youtube播放器获得更新(无论它是被播放还是暂停),并更新调用应用程序 现在的问题是如何区分YouTube播放器是由用户操作播放还是基于调用应用程序的输入播放。因为它们都调用了动作侦听器。当由调用应用程序播放时,我不希望调用应用程序再次更新 例如: 案例1: 调用应用程序向youtube播放器发送播放请求 播放Youtube播放
function callback(responseText) {
var response=JSON.parse(responseText.body);
var player = getPlayer();
var seekAhead = true;
switch (response.playerState) {
case YT.PlayerState.PLAYING:
player.seekTo(response.seconds,seekAhead);
player.playVideo();
break;
case YT.PlayerState.PAUSED:
player.seekTo(response.seconds,seekAhead);
player.pauseVideo();
break;
case YT.PlayerState.BUFFERING:
break;
case YT.PlayerState.ENDED:
break;
}
使用变量管理交换机的问题在于,当调用应用程序发送播放状态时,有一个seekTo调用调用暂停、缓冲和播放事件。它们需要一段时间才能完成,但变量开关在第一个事件时被切换。Hm。对于案例2,寄存器事件加载程序将推送一些数据。对于案例1寄存器,在“调用应用程序”中注册相同的回调,但不发送额外的数据
// In calling application:
$('selector').on('click', cb)
// For case 2:
$('selector').on('click', {userAction: true}, cb)
function cb (evt) {
if (evt.data.userAction) {
// react here
// this reaction will be not
// executed if
}
}
我没有看到jQuery标记。OP使用的是StateChange事件,而不是click。@Waldemarlce调用还有一个问题。如果我通过编程在播放器上调用seekTo,那么动作监听器将被调用三次,每次都用于暂停、缓冲和播放。在这种情况下,我无法传递附加数据,因为它是由调用应用程序调用的单个操作的API顺序调用的。您的代码在哪里?“调用应用程序如何向youtube播放器发送播放请求”?调用应用程序发送json。它包含需要应用于播放机的播放机状态。我会更新代码。