Как убедиться, что элемент DOM запускает наведение мыши, когда он содержит объект Flash - PullRequest
2 голосов
/ 14 октября 2008

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 22 октября 2008

Измените параметр 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>
1 голос
/ 14 октября 2008

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

  1. Там есть <div>, покрывающий вашу вспышку.
  2. Когда пользователь наводит на него курсор:
    1. Он вызывает любую функцию, которую ему нужно сделать.
    2. Он прячется, обеспечивая нормальное взаимодействие с SWF.
    3. Он помещает в окно функцию наведения мыши, которая будет:
      1. Показать оригинал div снова.
      2. Вызывает вашу функцию "mouseout".
      3. Удаляет функцию window.onmouseover.
0 голосов
/ 14 октября 2008

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

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

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

...