如何将jQuery事件处理程序附加到YouTube电影?

时间:2009-10-06 19:33:49

标签: javascript jquery flash jquery-plugins javascript-events

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

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

当我点击其中一部电影开始播放时,我希望循环停止,但我无法弄清楚如何将jQuery事件处理程序附加到播放器对象。

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

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

但这并不能解决问题。我不是Flash的作者,所以我对ActionScript并不熟悉,之前我从未在JavaScript和Flash电影之间建立过互动。

感谢您的帮助!

-Paul

4 个答案:

答案 0 :(得分: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');
  }
}

答案 1 :(得分:1)

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

你需要弄清楚你正在使用的电影暴露的javascript方法(希望它有文档),找到另一个提供javascript交互的方法,或者写你自己的SWF到处理它。

答案 2 :(得分:0)

你要找的是flash ExternalInterface类,它用于从flash到javascript以及从javascript到flash的通信。

答案 3 :(得分:0)

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

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