PDA

Просмотр полной версии : обойти onRollOut внешнего клипа при onRollOver внутреннего клипа


RAlfDog
01.08.2009, 21:40
Подскажите, пожалуйста, как обойти реагирование на onRollOver клипа, если указатель навелся на кнопку (Button) или другой клип (MovieClip)?

У меня есть некий клип "back_mc" с назначеными ему двумя событиями onRollOver и onRollOut. Эти события запускают функцию "показать панель навигации" и "спрятать панель навигации" соответственно. Т.е. как в некоторый флеш flv-плеерах на сайтах: при наведении мышки в область плеера всплывает панель управления, при выходе мышки за область - панель убирается. Хочу сделать также, но у меня панель убирается не только при выходе указателя мышки за границы моей флешки, но и при наведении мышки на любую кнопку внутри флешки (потому как срабатывает back_mc.onRollOver и указатель мышки наводится на эту кнопку).

Если кто делал подобное, скажите как можно показывать/прятать клип-панель управления при наведении/выходе мышки в область флешки, и чтобы нормально работали все кнопки на этой панели управления !?

Mnilionic
01.08.2009, 21:48
лучше делать на движение мыши.
Если мышка катается по флешу показываем панель. Как только остановилась по таймеру убираем панель.

mooncar
01.08.2009, 22:38
При наличии большого количества элементов, которые должны реагировать на наведение мыши и потенциальных проблем со взаимными перекрытиями их активных областей используйте проверки hitTest вместо метода onRollOver.
Это гибко и позволяет четко указывать условия, при которых нужно или не нужно вызвать то или иное действие. Все проблемы отпадают.
Для непрерывной проверки hitTest делайте, например, с использованием функции onMouseMove.

RAlfDog
01.08.2009, 22:44
Для непрерывной проверки hitTest делайте, например, с использованием функции onMouseMove.

Спасибо! :)
А при выходе мышки за пределы контейнера флеш-плеера событие onMouseMove вызывается?

mooncar
01.08.2009, 22:54
Вот самый простой код:
panelShowed = 0;
this.onMouseMove = function () {
if (back_mc.hitTest(_root._xmouse, _root._ymouse) && panelShowed == 0) {
panelShowed = 1;
trace("показываем панель");
}
if (!back_mc.hitTest(_root._xmouse, _root._ymouse) && panelShowed == 1) {
panelShowed = 0;
trace("прячем панель");
}
};
Но если back_mc равен всей области флешки, то действительно, onMouseMove не сработает на убирание панели. Сделайте по контуру этот мувик на несколько пикселей меньше, чем область флешки, и тогда все будет в порядке.
Или подумайте еще :)

skald
31.10.2009, 14:53
у меня возникла такая же проблема ... и предложенные здесь варианты не работают.

может быть есть запись типа mc.onRollOver = fulse, null, undefined или чтонить похожее??

либо можно както "распаковать" mc? сменить глубину и т.д.???

самое мощное, что пришло мне в голову, это удалить полностью mc и создать его по новой ... или перекрыть :quiet: ...
но это, мне кажется, далеко не самый изящный вариант :umnik2: ...

mooncar
31.10.2009, 15:02
delete mc.onRollOver ;
А чем hitTest не угодил?

skald
31.10.2009, 15:31
с ним эффекты не очень запускать))) там надо переменные водить, так как у меня эта тема создается для многих объектов динамически, с большой степенью вложенности то мне просто не подходит ...

спасибо за ответ))))

жаль .. но даже если на внешний клип удалить событие, то на внутренний работать не хочет .. может конечно тому причины динамические имена мувиков(((