Как обеспечить срабатывание элемента DOM при наведении курсора мыши, если он содержит объект Flash

У меня есть div, содержащий несколько дочерних элементов, один из которых - флеш-ролик.

При наведении курсора на этот div я хочу, чтобы он изменил стиль, чтобы указать, что он перевернут. Моя проблема в том, что события mouseover и mouseout не всегда срабатывают, особенно если пользователь слишком быстро наводит указатель мыши на элемент flash.

Любые предложения о том, как я могу гарантировать, что событие mouseover всегда запускается.

Я не могу добавить событие к самому флеш-ролику, потому что это проприетарный код, для которого у меня нет источника.

Также я не могу покрыть флэш-фильм в div / image, потому что мне нужно, чтобы события ролловера и щелчка происходили внутри самой флэш-памяти.


person EvilPuppetMaster    schedule 14.10.2008    source источник


Ответы (3)


Измените параметр wmode тега object / embed на непрозрачный.

Ваш код должен выглядеть примерно так.

<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia
.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,19,0" width="800" height="600">
    <param name="movie" value="movie.swf">
    <param name="wmode" value="opaque">
    <embed src="movie.swf" pluginspage="http://www.macromedia.com/go/getflashplayer" type="application/x-shockwave-flash" width="800" height="600"></embed>
</object>
person Claudio    schedule 21.10.2008

Что вы можете сделать, так это накрыть элемент flash невидимым элементом div. Поместите свой обработчик onmouseover в этот div и добавьте строку в обработчик, чтобы скрыть покрывающий div. В то же время добавьте в окно функцию onmouseover - она ​​должна срабатывать, когда мышь покидает элемент flash. (Надеюсь).

  1. Есть <div>, закрывающий вашу вспышку.
  2. When the user mouses over it:
    1. It calls whatever function it needs to do.
    2. Он скрывается, обеспечивая нормальное взаимодействие с SWF.
    3. It places a mouseover function on the window which will:
      1. Show the original div again.
      2. Вызывает вашу функцию "mouseout".
      3. Удаляет функцию window.onmouseover.
person nickf    schedule 14.10.2008
comment
хм, это могло быть гениально, я попробую - person EvilPuppetMaster; 14.10.2008

Простой ответ: вы не можете, учитывая ваши ограничения.

Сложный ответ вы, кажется, уже знаете. Флэш-ролик запускается в песочнице, которая не запускает обычные события DOM. Если вы хотите запускать события мыши во флеш-памяти, вы не можете скрыть это с помощью элементов DOM. Если у вас нет доступа к источнику флэш-ролика, вы не сможете навести мосты в мир JS.

Я думаю, у вас безвыходная ситуация.

person Rakesh Pai    schedule 14.10.2008
comment
вы действительно можете строить «мосты». Прошло некоторое время с тех пор, как я занимался программированием на Flash, но я думаю, что есть функция под названием FSCommand, которая позволяет вам вызывать функции javascript на странице. - person nickf; 14.10.2008