Flash получает события мыши под элементом HTML, когда установлена ​​прозрачность - PullRequest
2 голосов
/ 27 марта 2010

У меня есть HTML-документ с Flash-объектом и абсолютно позиционированный HTML-элемент над ним. Если для свойства CSS opacity элемента HTML установить любое значение меньше 1, объект Flash (который фактически покрыт) получает события мыши. Эта проблема не может быть воспроизведена с чистыми элементами HTML. Кроме того, Flash получает только hover события, поэтому я не могу щелкнуть ниже слоя.

Я поставил демонстрацию проблемы онлайн.

Такое поведение наблюдается в Firefox 3.6, Safari 4.0 и Chrome 5.0 в Mac и Windows. Установлен плагин Flash версии 10.

Это ошибка или нормальное и ожидаемое поведение? Если последнее, то как я могу предотвратить получение Flash-событий, когда они покрыты полупрозрачным слоем?

Ответы [ 5 ]

1 голос
/ 03 апреля 2010

Очень интересная проблема, я искал повсюду и нашел только решения ActionScript для этого. Я даже воспроизвел эту страницу локально и попытался поместить все, кроме кирпичной стены между вспышкой и панелью, но вспышка всегда реагировала на события мыши. К сожалению, единственное решение, которое у меня есть, - это переместить / заменить вспышку изображением, когда над ним появится панель, и я надеюсь, что вам нужна панель, которая покрывает всю карту. Если у вас есть немного навигации, которая скользит по части вспышки, то замена ее изображением может оказаться уклончивой. Вот код для этого с использованием jquery, который является лучшим, о котором я мог подумать, хотя вы немного моргаете, когда выходите из панели.

<script src="http://code.jquery.com/jquery-latest.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    $(".panel").mouseover(function() {
        $("#google-visualization-geomap-0").css({'position' : 'absolute', 'left' : '-999em'});
    });
    $(".panel").mouseout(function() {
        $("#google-visualization-geomap-0").css({'position' : 'static', 'left' : '0'});
    });
});
</script>

Надеюсь, это немного поможет.

0 голосов
/ 21 июля 2010

Может быть, это следует считать ошибкой браузера.

Что касается Google Chrome 5.0.375.99 и Apple Safari 5.0 (6533.16) с Flash Player 10.1 r53, я больше не сталкиваюсь с этой проблемой. Я получаю ожидаемое поведение, т.е. объект Flash за полупрозрачным слоем не реагирует на события мыши.

0 голосов
/ 16 апреля 2010

gravityone,

У меня та же проблема с выпадающим меню, перекрывающим запрограммированную часть флеш-памяти. Похоже, вы нашли некоторые решения ActionScript? Любой вклад будет оценен.

Я протестировал слушатель Event.MOUSE_LEAVE и, к сожалению, он не различает мышь, находящуюся непосредственно над SWF, и находящуюся над меню, когда она находится над SWF.

Спасибо!


Обновление:

Таким образом, я решил эту проблему, заставив мою часть Flash проверить переменную javscript перед выполнением ее эффектов пролонгации.

Чтобы узнать больше о связи SWF / JS, смотрите здесь: текст ссылки

или посмотреть, как я это применил, смотрите ниже:

Actionscript:

import flash.external.ExternalInterface;
private var navOver:Boolean;
private function onPackOver(event:MouseEvent){
    //Establish if Nav is on by grabbing js variable.
    navOver = ExternalInterface.call("navOnStatus");
    if (!navOver){
    // mouse over effects
    }
}

Javascript:

//navOn Variable is changed to true when mouse if over the nav, and false when it is not;
var navOn = false;
function navOnStatus(){
return navOn;
}
0 голосов
/ 01 апреля 2010

Слушайте Event.MOUSE_LEAVE на сцене. Это будет срабатывать всякий раз, когда мышь покидает сцену (при наведении мыши на другой элемент html) Затем вы можете удалить состояние наведения из всего, что не должно иметь его.

0 голосов
/ 28 марта 2010

Из того, что я вижу из вашей демонстрации, объект Flash сохраняет только событие hover, когда мышь переходит на левую панель - при нахождении над левой панелью объект flash больше не получает событие hover, в противном случае "Brazil «Всплывающее окно, например, будет продолжать следовать за мышью. Поведение может показаться из-за того, что мышь неправильно «покинула» объект flash. Если вы не возражаете, я спрашиваю, почему вы частично закрыли карту левой панелью?

...