Форум Flasher.ru

Форум Flasher.ru (http://www.flasher.ru/forum/index.php)
-   ActionScript 1.0/2.0 (http://www.flasher.ru/forum/forumdisplay.php?f=93)
-   -   обойти onRollOut внешнего клипа при onRollOver внутреннего клипа (http://www.flasher.ru/forum/showthread.php?t=128202)

RAlfDog 01.08.2009 21:40

обойти onRollOut внешнего клипа при onRollOver внутреннего клипа
 
Подскажите, пожалуйста, как обойти реагирование на 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

Цитата:

Сообщение от mooncar (Сообщение 839854)
Для непрерывной проверки hitTest делайте, например, с использованием функции onMouseMove.

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

mooncar 01.08.2009 22:54

Вот самый простой код:
Код AS1/AS2:

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

Код AS1/AS2:

delete mc.onRollOver ;

А чем hitTest не угодил?

skald 31.10.2009 15:31

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

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

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


Часовой пояс GMT +4, время: 17:25.

Copyright © 1999-2008 Flasher.ru. All rights reserved.
Работает на vBulletin®. Copyright ©2000 - 2026, Jelsoft Enterprises Ltd. Перевод: zCarot
Администрация сайта не несёт ответственности за любую предоставленную посетителями информацию. Подробнее см. Правила.