Жидкостная навигационная панель Flash AS3 - PullRequest
0 голосов
/ 10 октября 2009

Я ужасен с AS3. Я пробовал этот эффект несколькими разными способами. Я пытаюсь получить панель навигации в AS3, которая делает что-то вроде этого.

A | B | C | D

нажмите на слайды C бар, и вы получите

C | A | B | D

нажмите на слайды D-бара, и вы получите

D | A | B | C

и так далее.

Помощь или ссылка на помощь очень ценится. Прямо сейчас у меня так много.

david_btn.addEventListener(MouseEvent.CLICK, menuNav);
kate_btn.addEventListener(MouseEvent.CLICK, menuNav);
robin_btn.addEventListener(MouseEvent.CLICK, menuNav);
aaron_btn.addEventListener(MouseEvent.CLICK, menuNav);
ken_btn.addEventListener(MouseEvent.CLICK, menuNav);
ann_btn.addEventListener(MouseEvent.CLICK, menuNav);

function menuNav(event:MouseEvent):void {
 gotoAndStop(event.target.name);
}

Каждый идет в мувиклип, играет на полпути и останавливается. Теперь мне нужно сыграть вторую половину, прежде чем перейти на следующий указанный лейбл.

Ответы [ 2 ]

1 голос
/ 11 октября 2009

Привет, я дал ответ Яше плюс, потому что он служит цели, однако я просто проведу вас через код ниже, чтобы вы могли понять, как этого добиться. Он также имеет ряд дополнительных проверок / конфигураций и т. Д.

//these are your button instances
var originalOrder:Array = [tom, dick, harry, jane];

//this is a reference to the currently selected item
var selectedItem:MovieClip = tom;

//these are the co-ordinates of where the first item should be placed
var offsetX:Number = 100;
var offsetY:Number = 100;

//this is how much padding you want between items
var padding:Number = 8;

addEventListener(MouseEvent.CLICK, mouseClickHandler);

private function mouseClickHandler(e:Event):void
{
    var index:int = originalOrder.indexOf(e.target);
    //if the thing have clicked is in our array of buttons it is valid, we
    //could have clicked something else interactive
    if(index > -1)
    {
        //update the reference to the newly selected item
        selectedItem = originalOrder[index];
        //move the items about
        calculatePlacement();
    }
}


private function calculatePlacement():void
{
    //we want to start with our x-position being the current offset
    //plus the selectedItem's width plus the padding
    var cumlativeWidth:Number = offsetX + selectedItem.width + padding;
    var item:MovieClip;

    //loop over all the items in our list in the order they are specified
    for( var i:int = 0; i<originalOrder.length; i++)
    {
        //assign item to the currently looped item
        item = originalOrder[i];
        //if the item we are looking at is the selected item, place it at the
        //offset position
        if(item == selectedItem)
        {
            item.x = offsetX;
            item.y = offsetY;
            //We could tween using Tweener/TweenLite 
            //TweenLite.to(item, 1, {x:offsetX, y:offsetY});
        }
        //otherwise put it at our x-position, then add on its width + padding
        //to the cumulative x-position.
        else
        {
            item.x = cumlativeWidth;
            item.y = offsetY;
            //We could tween using Tweener/TweenLite 
            //TweenLite.to(item, 1, {x:offsetX, y:offsetY});
            cumlativeWidth += item.width + padding;
        }
    }
}
1 голос
/ 10 октября 2009

Просто убедитесь, что начальная позиция x первой кнопки равна 14. Или вы соответственно измените код.

пример здесь http://www.hupcapstudios.com/slideNav.swf

import caurina.transitions.Tweener;

var btnArray:Array = new Array(btn1,btn2,btn3,btn4);
var btnNames:Array = new Array("Tom","Dick","Harry","Marco");

for(var i:int=0;i<btnArray.length;i++)
{
    btnArray[i].btn_txt.text = btnNames[i];
    btnArray[i].addEventListener(MouseEvent.CLICK, slideBtn);
}

function slideBtn(e:Event):void
{
    var aPos:Number = e.currentTarget.x;
    var bPos:Number;
    var zeroBtn:*; 

    trace(aPos);

    if(aPos !== 14)
    {
        for(var p:int = 0;p<btnArray.length;p++)
        {
            if(btnArray[p].x == aPos)
            {
                bPos = aPos;
                break;
            }
        }
        for(var q:int = 0;q<btnArray.length;q++)
        {
            if(btnArray[q].x == 14)
            {
                zeroBtn = btnArray[q];
                break;
            }
        }

        Tweener.addTween(e.currentTarget, {x:14, time:.4,transition:"easeOutQuint"});
        Tweener.addTween(zeroBtn, {x:bPos, time:.4,transition:"easeOutQuint"});
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...