如何区分代码调用的动作监听器和用户?

时间:2017-05-29 07:46:39

标签: javascript video youtube-javascript-api event-listener

我正在使用Youtube Iframe Javascript API处理应用程序。我必须根据另一个应用程序(称为调用应用程序)的输入来播放或暂停视频。我还必须从这个Youtube播放器获得更新(无论是播放还是暂停)并更新调用应用程序。

现在的问题是如何通过用户操作或基于来自Calling应用程序的输入来区分您的电子管播放器。因为它们都会调用动作侦听器。当由调用应用程序播放时,我不希望再次更新调用应用程序。

例如:

案例1:

  1. 调用应用程序向youtube播放器发送播放请求。
  2. 播放Youtube播放器。
  3. 调用onStateChange侦听器。
  4. 通知应用程序玩家状态已更改。 (我不希望这种情况发生)。
  5. 案例2:

    1. 用户点击播放器上的播放按钮。
    2. 播放Youtube播放器。
    3. 调用onStateChange侦听器。
    4. 通知应用程序玩家状态已更改。 (我希望这种情况发生)。
    5. 我可以在程序调用时使用switch变量执行此操作,并在用户调用它时将其禁用。但是有太多这样的情况,我不能指望所有开发人员在考虑所有这些情况时处理它。

      所以我需要一个正确的方法让动作监听器知道用户是否已经调用了该动作,或者程序是否已经调用了该动作。 API中是否有内置方法来执行此操作?

      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;
          }
      

      使用变量管理交换机的问题是,当Calling应用程序发送播放状态时,有一个seekTo调用,它调用pause,buffer和play事件。它们需要一段时间才能完成,但变量开关会在第一个事件中切换。

1 个答案:

答案 0 :(得分:0)

嗯。对于案例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 
  }
}