Получение функции jQuery для запуска при нажатии на видео

Я настроил функцию приостановки звука в mp3-плеере всякий раз, когда на странице нажимаются определенные элементы, используя ExternalInterface, но у меня возникла проблема в IE.

Установка такова: у меня есть видео-страница, которая вызывает список видео YouTube, используя RSS. Самое последнее видео отображается на странице в div под названием display. Затем все остальные видео в ленте отображаются в виде миниатюр и ссылок... Если щелкнуть одно из них, то основное «отображаемое» видео заменяется и начинает воспроизводиться. Все это работает нормально.

Я хочу, чтобы mp3-плеер на странице приостанавливал музыку всякий раз, когда запускается видео.

Функция ExternalInterface работает правильно. Всякий раз, когда нажимается одна из ССЫЛОК, mp3-плеер останавливается, начинается видео и т. д.

Проблема в том, что я также хочу, чтобы он останавливался при нажатии на ГЛАВНОЕ видео. Очевидно, поскольку это внешнее видео, загруженное с YouTube, я не могу получить доступ к FLA, чтобы добавить собственный код ExternalAccess.

Я попытался добавить идентификатор к видеообъекту, а затем использовать его в качестве селектора в jQuery для вызова функции stopMovie... нет. Я попытался добавить к нему класс, а затем вызвать функцию stopMovie при нажатии на класс. Я попытался поместить функцию щелчка в div, в который загружается видео ... ничего не работает. Если я удалю основное видео и у меня будет пустой div, затем щелкните div, mp3-плеер остановится... но если я загружу видео в div и щелкну по нему, ничего не произойдет (в IE... он работает в ФФ).

Очевидно, что jQuery не получает сообщение о том, что видео было нажато. Любые предложения или обходные пути?

Сценарий действия:

import flash.external.ExternalInterface;

ExternalInterface.addCallback("stopMovie", pauseSound);

function pauseSound(str:String):void {
    if (str == "stop") {
            if (my_channel) {
            song_position = my_channel.position;
            my_channel.stop();
            song_paused=true;
            }
    }
}

Код jQuery:

function getFlashMovie(movieName) {
  var isIE = navigator.appName.indexOf("Microsoft") != -1;
  return (isIE) ? window[movieName] : document[movieName];
}


function stopMovie() { 
    getFlashMovie('audio').stopMovie("stop");
            }

//показываю все методы, которые я пробовал//

$('#video_player').live("click", function(){
    stopMovie();
    });
$('.stopper').live("click", function(){
    stopMovie();
    });
$('#curVideo').live("click", function(){
    stopMovie();
    });
 $('#display object').live("click", function(){
    stopMovie();
    });

HTML:

<div id="video_player">
<div id="display">

(some PHP code here to call the feed)

<object id="curVideo" class="stopper" width="410" height="332"><param name="movie" value="<?php echo $videolink; ?>"></param><param name="allowFullScreen" value="true"></param><param name="wmode" value="transparent"></param><param name="allowscriptaccess" value="always"></param><embed src="<?php echo $videolink; ?>" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" wmode="transparent" width="410" height="332"></embed></object>
</div>
</div>

person Nay    schedule 26.04.2010    source источник
comment
На данный момент я придумал обходной путь, который работает, но, по большому счету, он не идеален ... Я надеюсь, что кто-то все еще может помочь мне найти реальное решение для этого. Просто, чтобы заставить его работать, мне пришлось поместить в основном прозрачный div поверх видео div (непрозрачность установлена ​​​​на 01 ... полностью прозрачный div не был кликабельным в IE) и сделал его кликабельным. При нажатии запускается функция отключения музыки, а затем перезагружается раздел видео с тем же видеоклипом, установленным на автозапуск, и начинается воспроизведение. Это означает, что на самом деле перезагружается видео, поэтому оно мигает, а затем снова включается...   -  person Nay    schedule 27.04.2010


Ответы (2)


Я не уверен, что это решит вашу проблему, но для чего это стоит - у меня была проблема с Flash в IE, где встраивание объекта всегда было самым верхним и не позволяло отображать окружающую структуру html на основе z-index css. Что я сделал, так это установил для параметра wmode значение прозрачности, и это исправило его. Возможно, что-то подобное происходит здесь, когда видео находится сверху только в IE и хоронит окружающий div, к которому привязаны ваши события.

person James    schedule 26.04.2010
comment
Я рассматривал что-то подобное, поэтому я установил прозрачный wmode, но это никак не повлияло на это. Я даже рассматривал возможность размещения прозрачного элемента div в верхней части видео, который можно было бы щелкнуть, а затем исчезнуть после нажатия... но тогда пользователю придется щелкнуть второй раз, чтобы начать видео под ним. Не могу поверить, что это может быть настолько сложно... - person Nay; 27.04.2010

Я предполагаю, что IE не запускает событие щелчка для фактического объекта swf.

Вы пытались вместо этого поместить обработчик событий в div #display?

person Neil Aitken    schedule 26.04.2010
comment
Да, я попробовал это первым, и когда это не сработало, я попытался поместить его в div video_display. Если элементы div пусты, то щелчок по любому из них ДЕЙСТВИТЕЛЬНО работает. Фактически, если вы щелкнете крошечную часть границы ВОКРУГ видеообъекта (щелкнув div, но не объект Flash), тогда это сработает. Но jQuery не выбирает объект внутри div и не заставляет его наследовать событие щелчка. - person Nay; 26.04.2010