Flash - skrypt animowane menu wActionScript 3

Animowane menu w ActionScript 3 korzystające z danych HTML (FlashVars)

Przykład pokazuje jak stworzyć menu w ActionScript za pomocą biblioteki Tween Lite Basics

Skrypt bazuje na wartościach z FlashVars, które mogą być ręcznie wprowadzane przez kod HTML, kod generuj na tej podstawie animacje menu.
Plik zapisz pod nazwą menu.swf.

KOD HTML:

<object type="application/x-shockwave-flash" data="menu.swf" width="197" height="300">

<param name="movie" value="menu.swf" />

<param name="FlashVars" value="ilosc=3&men1=men1&men2=men2&men3=men3&id1=1&id2=222&id3=30" />

</object>

Pierwsyz parametr to ilość elementów, men1, men2 to nazwy zmiennych oraz ich wartości tekstowe. id1, id2 to linki do adresów.


UWAGA: Adres będzie wyglądał następująco: kategoria-(wartość id).html

czyli np. dla pierwszego id będzie: kategoria-1.html

Kod ActionScript:

//Importuje biblioteke
import gs.*;
import gs.plugins.*;
TweenPlugin.activate([AutoAlphaPlugin,TintPlugin]);

//maska
var MASK_HEIGHT:Number = myMask.height;

//obiekt Sprite do przetrzymywania menu
var menuHolder:Sprite = new Sprite();

//pozycja maski
menuHolder.x = myMask.x;
menuHolder.y = myMask.y;

//dodanie Sprite do sceny
addChild(menuHolder);

var mouseIsOver:Boolean = false;

//starsza pozycja Y
var oldY:Number = menuHolder.y;

//ustawienie maski
menuHolder.mask = myMask;


var paramObj:Object = LoaderInfo(this.root.loaderInfo).parameters;
//tablica przetrzymująca id
var ids:Array = new Array();
//pętla do ilosci danych
for (var i=0; i < LoaderInfo(this.root.loaderInfo).parameters.ilosc; i++) {
//adres www
var element:String = LoaderInfo(this.root.loaderInfo).parameters["id"+(i+1)];
ids.push(element);
var j:int = 1+i;
//tworzenie pojedynczego elementu
var menuItem:MenuItem = new MenuItem();
menuItem.num = element;
//ustawianie pozycji elementów
menuItem.x = 0;
menuItem.y = i * menuItem.height;

//ustawienie tekstu menu
var link:String = LoaderInfo(this.root.loaderInfo).parameters["men"+(i+1)];
menuItem.itemText.text = link;

menuItem.mouseChildren = false;

menuItem.buttonMode = true;

//nasłuchiwanie na akcje
menuItem.addEventListener(MouseEvent.MOUSE_OVER, mouseOverItem);
menuItem.addEventListener(MouseEvent.MOUSE_OUT, mouseOutItem);
menuItem.addEventListener(MouseEvent.CLICK, mouse_click);

//Add the menuItem to the menuHolder
menuHolder.addChild(menuItem);
}

var HOLDER_HEIGHT:Number = menuHolder.height;

//animacja menu
menuHolder.addEventListener(MouseEvent.MOUSE_OVER, mouseOverMenu);
menuHolder.addEventListener(MouseEvent.MOUSE_OUT, mouseOutMenu);

//na wejscie klatki nasłuchiwacz
addEventListener(Event.ENTER_FRAME, enterFrameHandler);

function mouse_click(e:MouseEvent):void {
var url:String = "kategoria-"+e.currentTarget.num+".html";
var request:URLRequest = new URLRequest(url);
try {
navigateToURL(request, "_self");
} catch (e:Error) {
trace("Error occurred!");
}

}

//funkcja na najechanie menu
function mouseOverMenu(e:Event):void {
mouseIsOver = true;
}

//funkcja na zjechaniu z menu
function mouseOutMenu(e:Event):void {
mouseIsOver = false;
}

//funkcja na najechanie konkretnego elementu
function mouseOverItem(e:Event):void {


var item:MenuItem = e.target as MenuItem;


TweenMax.to(item.itemFill, 0.01, {tint: 0xff8800});
}

//funkcja na zjechanie myszki z elementu
function mouseOutItem(e:Event):void {


var item:MenuItem = e.target as MenuItem;

TweenMax.to(item.itemFill, 0.5, {tint: 0x16222E});
}

//funkcja na wejściu klatki
function enterFrameHandler(e:Event):void {

//jeśli myszka jest nad menu
if (mouseIsOver) {

//oblicz dystans do maski
var distance:Number = mouseY - myMask.y;

//oblicz dystans w procentach
var percentage:Number = distance / MASK_HEIGHT;

//zapisz stary punkt y
oldY = menuHolder.y;

//oblicz nowy punkt y w celu koordynacji
//odejmujemy wysokosc maski od Sprite, w innym przypadku menu by poszło zbyt do góry
var targetY:Number = -((HOLDER_HEIGHT - MASK_HEIGHT) * percentage) + myMask.y;

//animacja przesuwania się menu
TweenMax.to(menuHolder, 0.4, {y: Math.round(targetY)});

tweenLiteBasics.zip