3

[编辑:对不起那些已经回答的人——在我睡眠不足的状态下,我忘记了这种特殊情况是一部 YouTube 电影,而不是 JW FLV 播放器。我可以看到有更多关于与 YouTube 电影交互的文档,所以我会继续这样做,但也欢迎提供更多信息]

我正在使用 jQuery 循环插件 ( http://malsup.com/jquery/cycle/ ) 旋转的 div 集合中使用嵌入的 YouTube 视频。

我希望在单击其中一部电影开始播放时停止循环,但我不知道如何将 jQuery 事件处理程序附加到播放器对象。

这是我当前代码的样子(你不能直接用 jQuery 选择对象标签,所以我选择父 div,然后将对象元素作为第一个子元素):

$("div.feature-player").children(":first").click(function(event) {
   $('#features').cycle('stop');
});

但这并不能解决问题。我不是 Flash 作者,所以我对 ActionScript 不是很熟悉,而且我以前从未设置过 JavaScript 和 Flash 电影之间的交互。

4

4 回答 4

10

YouTube 播放器 API 非常简单。你只需要监听onStateChange事件并根据状态控制循环插件:

这是一个工作演示: http: //jsbin.com/izolo(可通过http://jsbin.com/izolo/edit编辑)

以及相关的代码:

function handlePlayerStateChange (state) {
  switch (state) {
    case 1:
    case 3:
      // Video has begun playing/buffering
      videoContainer.cycle('pause');
      break;
    case 2:
    case 0:
      // Video has been paused/ended
      videoContainer.cycle('resume');
      break;
  }
}

function onYouTubePlayerReady(id){
  var player = $('#' + id)[0];
  if (player.addEventListener) {
    player.addEventListener('onStateChange', 'handlePlayerStateChange');
  }
  else {
    player.attachEvent('onStateChange', 'handlePlayerStateChange');
  }
}
于 2009-10-07T01:31:56.157 回答
1

就 javascript 而言,Flash 电影几乎是黑盒子。如果您使用的 SWF 不是为与 javascript 交互而编写的,那么您可能不走运。

您要么需要弄清楚您正在使用的电影公开了哪些 javascript 方法(希望它有文档),找到另一个提供javascript 交互的方法,或者编写自己的 SWF 来处理它。

于 2009-10-06T20:01:17.177 回答
0

如果您使用 swfobject 嵌入播放器,您将需要使用 swfobject.getObjectById来获取对电影的引用。阅读文档以了解为什么需要这样做。

此外,您需要为播放器设置 {wmode:"transparent"} 以使其将点击事件冒泡到 JavaScript。

于 2009-10-06T20:00:32.947 回答
0

您正在寻找的是 flash ExternalInterface类,它用于从 flash 到 javascript 以及从 javascript 到 flash 的通信。

于 2009-10-06T19:40:19.200 回答