Как мне прикрепить обработчик событий jQuery к фильму YouTube? - PullRequest
3 голосов
/ 06 октября 2009

[РЕДАКТИРОВАТЬ: Извините тех, кто уже ответил - в моем лишенном сна состоянии я забыл, что эта конкретная ситуация - фильм на YouTube, а не проигрыватель JW FLV. Я вижу, что есть более обширная документация по взаимодействию с фильмами YouTube, поэтому я буду продолжать это, но любая дополнительная информация также приветствуется]

Я использую встроенные видео YouTube в коллекции элементов div, которые вращаются с помощью подключаемого модуля jQuery (http://malsup.com/jquery/cycle/).

Я бы хотел, чтобы цикл останавливался, когда я нажимал на один из фильмов, чтобы начать его воспроизведение, но я не могу понять, как прикрепить обработчик события jQuery к объекту проигрывателя.

Вот как выглядит мой текущий код (вы не можете напрямую выбрать тег объекта с помощью jQuery, поэтому я выбираю родительский div и затем получаю элемент object в качестве первого потомка):

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

Но это не помогает. Я не являюсь автором Flash, поэтому я не очень хорошо знаком с ActionScript и никогда раньше не настраивал взаимодействие между JavaScript и Flash-фильмом.

Ответы [ 4 ]

10 голосов
/ 07 октября 2009

API проигрывателя YouTube довольно прост. Вам просто нужно прослушать событие 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 голос
/ 07 октября 2009

Флэш-фильмы - это в значительной степени чёрные ящики для JavaScript. Если используемый вами SWF-файл не был написан для взаимодействия с javascript, вам, вероятно, не повезло.

Вам нужно будет либо выяснить, какие методы javascript демонстрирует используемый вами фильм (надеюсь, он имеет документацию), либо найти другой, который обеспечивает взаимодействие с javascript, либо написать свой собственный SWF для обработки это.

0 голосов
/ 07 октября 2009

Если вы встраиваете плеер с помощью swfobject, вам нужно будет использовать swfobject.getObjectById , чтобы получить ссылку на фильм. Прочитайте документы, чтобы понять, почему вам нужно это сделать.

Также вам нужно установить {wmode: "transparent"} для игрока, чтобы он всплывал события клика в JavaScript.

0 голосов
/ 06 октября 2009

Что вам нужно, так это класс flash ExternalInterface , который используется для связи от flash до javascript и от javascript до flash.

...