as3 RollOver ролик меню - PullRequest
       13

as3 RollOver ролик меню

0 голосов
/ 20 сентября 2009

Я пытаюсь сделать нижнее меню, как в www.zara.com .

Мой код имеет прозрачный мувиклип, который показывает меню при наведении мыши на него и скрывается при наведении мыши.

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

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

Как сделать, чтобы мышь наматывала ролик поверх другого клипа, не разворачивая первый?

Неужели это так?

Спасибо!

Ответы [ 4 ]

0 голосов
/ 04 марта 2011

как упомянуто выше, relatedObject работает ОТЛИЧНО

Например, если у вас есть MovieClip A, а затем Movieclip B сверху. Вы хотите, чтобы Movieclip B отображался при наведении на MovieClip A и скрывался при развертывании Movieclip A,

обычно происходит то, что Movieclip B будет показываться, но затем, когда вы наводите курсор мыши на B, Moveclip B исчезнет, ​​так как B лежит на вершине A, происходит развертывание

так что в Movieclip A свиток даже просто используют if ((event.relatedObject == MoveClipB) { // если он катится по B, который является связанным объектом, ничего не делать } еще { // Скрыть B }

События для B все еще работают, когда это используется

0 голосов
/ 20 сентября 2009

Вот быстрый и грязный трюк, исходящий из техники javascript

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

// define a boolean value for the moust beeing on the menu
public var menuOver:Boolean = false;

public function onMenuOver( event:MouseEvent ):void
{
    menuOver = true;
    // other menu code here
}

public function onMenuOut( event:MouseEvent ):void
{
    menuOver = false;
    // other menu code here
}

public function onMainClipOver( event:MouseEvent ):void
{
     // show menu code here
}

public function onMainClipOut( event:MouseEvent ):void
{
    setTimeout(execMainClipOut,100);
}

/**
 * close the menu only if the mouse is not over the menu
 */
public function execMainClipOut()
{
    if(!menuOver){
        // close the menu
    }
}
0 голосов
/ 21 сентября 2009

Ooh! Я только что вспомнил кое-что интересное, что может решить вашу проблему.

Когда происходит событие MouseEvent.ROLL_OUT, функция слушателя вызывается с объектом MouseEvent, обладающим свойством relatedObject. Это ссылка на объект, который получает фокус мыши (переворачивается) - в вашем случае вы можете игнорировать событие, если это свойство установлено для вашего другого объекта MovieClip, а затем запускать событие вручную, когда другой объект MovieClip прокручивается (так что он выкатывает их обоих).

0 голосов
/ 20 сентября 2009

Когда мувиклип B появляется поверх другого мувиклипа A, мувиклип A вызывает событие MouseEvent.ROLL_OUT. Это связано с тем, что MovieClip B не позволяет MovieClip A получать какие-либо MouseEvents (поскольку он находится сверху).

Если вам не нужно получать MouseEvents от MovieClip B, вы можете установить для его свойства mouseEnabled значение false, тогда MovieClip A под ним будет получать MouseEvents.

Кроме того, в зависимости от того, имеет ли это смысл в вашем конкретном случае или нет, вы можете сделать MovieClip B дочерним по отношению к MovieClip A, так что когда MovieClip B затеняет MovieClip A, событие ROLL_OUT не будет запущено.

Надеюсь, это поможет ответить на ваш вопрос.

...