Статьи

Создайте универсальное меню ActionScript 3.0 с маскировкой

Навигация является важной частью вашего веб-сайта, но часто является занудой для создания и обслуживания. В этом уроке я опишу быстрый и надежный способ использования базовых навыков ActionScript в сочетании с вашим творческим потенциалом для создания интуитивно понятных и удобных для пользователя навигационных систем. Ладно, пора пачкать руки, ну … может быть, потом …




Этот рассказ демонстрирует, как предотвратить двойной щелчок по элементам в меню, который часто упускается из виду и повышает удобство работы в Интернете. Вы также научитесь легко создавать и комбинировать несколько массивов. Сначала мы разметим сцену, разместим ключевые кадры и метки, затем в конце добавим немного ActionScript, чтобы оживить его. Мы также узнаем, как создавать переходы страниц, которые добавят немного приятного на ваш сайт.

В ретроспективе этот урок очень прост, но он охватывает много скрытых драгоценных камней. Проявите творческий подход, свяжите данные с xml, измените формы маски, измените состояния нажатия кнопки и наслаждайтесь.

Создайте новый документ ActionScript 3: 600px X 400px, 30 кадров в секунду и используйте белый цвет в качестве фона. Перво-наперво, давайте создадим кнопку. Нарисуйте текстовое поле на сцене и дайте ему имя экземпляра «txt». Для этого перейдите на панель свойств (CTRL F3 / «Окно»> «Свойства»> «Свойства»). Теперь преобразуйте его в символ (F8 / Изменить> Преобразовать в символ), выберите мувиклип и убедитесь, что точка регистрации находится в левом верхнем углу. Назовите экземпляр «button_text_mc».

На новом слое сделайте прямоугольник, который соответствует границам вашего текстового мувиклипа. Это будет функционировать как область нажатия для вашей кнопки. Преобразуйте это в символ.

Теперь выберите оба слоя и конвертируйте их в символ. Назовите этот экземпляр «hitarea_mc». Убедитесь, что вы установили альфа-значение «hitarea_mc» в ноль в окне свойств.

Теперь давайте сделаем держатель для наших кнопок. Конечно, вы можете сделать это более продвинутым, сделав полную динамическую навигацию с xml или php, но для этого урока мы будем использовать
некоторые ActionScript, чтобы назвать наши пункты меню и заполнить функциональность.

Перетащите один экземпляр мувиклипа «button_movieclip» на сцене для каждого элемента, который вы хотите использовать для навигации. Мы будем использовать 6 в этом случае. Теперь дайте каждому экземпляру уникальное имя; Я выбрал b1, b2, … до b6. Далее мы собираемся обернуть все это в новый мувиклип под названием «menu_total».

Хорошая вещь об этом, если мы хотим использовать это позже, мы можем просто перетащить клип «menu_total» из библиотеки и использовать его напрямую. Теперь у вас должен быть один видеоклип на сцене, содержащий шесть кнопок, которые мы трансформируем в нашу навигацию.

Ааа, самое интересное. Немного анимации и хитрости. Как видно из примера, меню раскрывается только тогда, когда курсор мыши перемещается рядом с полем меню и строкой. Чтобы достичь этого, нам понадобится невидимая хитария и несколько ключевых кадров, чтобы перейти в другое состояние просмотра.

Убедитесь, что вы находитесь внутри мувиклипа menu_total и создайте 2 новых слоя в самом верху ваших слоев: один с именем «code», другой с именем «label». Выберите слой «метки» и добавьте пустой ключевой кадр в кадры 1, 2, 10, 24, 25, 37. Теперь назовите вторую метку кадра «ЗАКРЫТО», десятую метку кадра «НАД» и 25-ю метку «ВЫХОД».

Создайте новый слой под слоем кнопок и назовите его «hit_area», затем возьмите мувиклип «hitarea_mc» из своей библиотеки и поместите его слева от кнопок. Наконец, измените его масштаб, чтобы у пользователя было место для перемещения мыши. Убедитесь, что ключевые кадры для «HOVER» доходят только до 10 кадра.
Создайте еще один слой и назовите его «menu_out», затем перейдите к 10-му кадру и поместите еще одну копию «hit_area_mc» на сцену. Дайте ему имя экземпляра «HOVEROUT_MC» и убедитесь, что оба этих мувиклипа имеют альфа-значение 0. Кроме того, эти два мувиклипа области попадания должны немного перекрываться. В противном случае Flash потеряет тест на попадание, когда вы подведете мышь к кнопкам.

Хорошо, после всего этого ваши рамки и метки должны выглядеть так:

Вот как должны выглядеть области попадания мыши:

Вот как должна выглядеть вторая Hitarea: она начинается с ключевого кадра состояния over.

Теперь давайте посмотрим на маскировку.

На всем протяжении анимации для состояний rollOver / rollOut создайте пустой мувиклип и присвойте ему имя экземпляра «loaderclip».

Это зависит только от вас и вашего воображения, но вот основа, с которой вы должны начать. Создайте новый файл ActionScript 3.0 с теми же размерами, что и ваш основной файл. Создайте свою страницу в / из анимации. Убедитесь, что вы ставите остановку (); команда в конце состояния вашей анимации (место, куда будет приходить фактический контент). Сохраните ваши файлы как page1.swf, page2, … до количества созданных вами кнопок, в данном случае 6.

В моем очень простом примере я начал с небольшого прямоугольника, который перемещался по шкале времени от альфа 0 до 100, пока он не достиг конечной высоты.

Хорошо, теперь немного времени ActionScript. Прежде всего, вы можете оживить все, что происходит с меню, как вы пожелаете. Например, вы можете использовать более продвинутую анимацию rollOver / rollOut.
Ради этого урока я выбрал очень простой эффект.

Вам нужно будет загрузить и импортировать класс с открытым исходным кодом, созданный Грантом Скиннером с именем «tweenmax» . Убедитесь, что вы загрузили версию AS3. Мы также будем использовать встроенные классы для переходов.

Выбрав слой кода на первом кадре, введите код в следующих шагах (я объясню каждую строку в комментариях).

Примечание: с этого момента очень легко создать новый массив со всеми вашими действиями и связать его с обработчиком onRelease так же, как вы связываете имена кнопок с реальными мувиклипами. С минимальными усилиями вы можете создать очень мощную навигационную систему, которую можно использовать снова и снова в кратчайшие сроки. Вы можете создать класс для этого, но это не цель этого урока.

1
import gs.TweenMax;import fl.motion.easing.*;import fl.transitions.*;import fl.transitions.easing.*;
01
02
03
04
05
06
07
08
09
10
11
12
//variables for the button rollover,out,hit state
var speed:Number = 0.3;var motion:Function = Sine.easeOut;var colourOver:String = «0x9BE07C»;var colourOut:String = «0x000000»;var colourRelease:String = «0xFF0000»;
//store the buttons as an object for later use or reference.
var btn:Object;var disabledBtn:Object;
//The currentPage,nextPage variable holds the movieclips we will load.
var currentPage:MovieClip = null;var nextPage:MovieClip = null;
//the loader
var loader:Loader;
//which movieclip to load
var urlRequest:URLRequest;
//the name for our menu
movieclip.MENUNAME.txt.text = «MENU >»;
1
2
3
4
5
6
//first we’ll reference to all the buttons on the stage
var buttons:Array = new Array (b1, b2, b3, b4, b5, b6);
//this array holds all the names we want to use for our buttons
var button_name:Array = new Array («Home», «About Us», «Selected Work», «References», «Jobs», «Contact»);
//this array stores which swf we want to load
var swf_array:Array = new Array («swf1.swf»,»swf2.swf»,»swf3.swf»,»swf4.swf»,»swf5.swf»,»swf6.swf»);
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
for (var i:String in buttons)
{
    //assign the button_name array to the textclip of our buttons
    buttons[i].button_txt.txt.text = button_name[i];
    //assign which swf we’ll load for each of the buttons
    buttons[i].currentPage = swf_array[i];
    //declare that we’ll use the movieclip as a button
    buttons[i].buttonMode = true;
    //make sure that the button_txt clip doesn’t react to the mouse
    buttons[i].button_txt.mouseChildren = false;
    //add the listeners for our buttons
    buttons[i].addEventListener (MouseEvent.CLICK,onCLICK);
    buttons[i].addEventListener (MouseEvent.MOUSE_OVER,onOVER);
    buttons[i].addEventListener (MouseEvent.MOUSE_OUT,onOUT);
}
1
2
3
4
5
function onCLICK (event:MouseEvent):void{
//make sure the variable of our current target is stored, we’ll adress it later on to the function to disable it’s state
btn = event.currentTarget;
//here we tween to the over color we’ve assigned earlier on with the variables.
TweenMax.to (btn , speed , {tint:colourOver, ease:motion});};function onOUT (event:MouseEvent):void{ btn = event.currentTarget;

Это основное ядро ​​нашего проекта. Каждый важный шаг комментируется в коде.

01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
function disableBtn (btn:Object):void
{
    //if the button is disabled we’ll make sure every event is back in it’s place so we can use it again
    if (disabledBtn)
    {
        disabledBtn.buttonMode = true;
        disabledBtn.mouseEnabled = true;
        TweenMax.to (disabledBtn , speed , {tint:colourOut , ease:motion});
        disabledBtn.addEventListener (MouseEvent.CLICK,onCLICK);
        disabledBtn.addEventListener (MouseEvent.MOUSE_OUT,onOUT);
        disabledBtn.addEventListener (MouseEvent.MOUSE_OVER,onOVER);
    }
    TweenMax.to (btn , speed , {tint:colourRelease , ease:motion});
    //disabling means not being able to use it anymore, so here we remove all functionality
    btn.buttonMode = false;
    btn.mouseEnabled = false;
    btn.removeEventListener (MouseEvent.CLICK,onCLICK);
    btn.removeEventListener (MouseEvent.MOUSE_OUT,onOUT);
    btn.removeEventListener (MouseEvent.MOUSE_OVER,onOVER);
    //make sure the current selected button is labeled as disabledBtn.
    disabledBtn = btn;
    //Create a new loader instance
    loader = new Loader();
    //add the currentPage variable to the url request
    urlRequest = new URLRequest(btn.currentPage);
    //load the url request
    loader.load (urlRequest);
    //once the file has been loaded we’ll trigger the fileLoaded function
    loader.contentLoaderInfo.addEventListener (Event.COMPLETE, isLoaded);
}
 
function isLoaded (event:Event):void
{
 
    //The loader now contains the page we are going to display later on
    nextPage = event.target.content;
    //check if there is a currentPage
    if (currentPage != null)
    {
    //tween the alpha to zero
    //so wait…why are we using 2 different tweenclasses?
        var tweenAlpha:Tween = new Tween(currentPage, «alpha», Regular.easeOut, 1, 0, .7, true);
         
    //additionally, you can make the currentPage perform an extra outgoing animation.
        currentPage.gotoAndPlay (31);
        //currentPageGone will be called when the tween is finished
        tweenAlpha.addEventListener (TweenEvent.MOTION_FINISH, currentPageOut);
    } else
    {
        //if there is no currentPage we’ll trigger the showNextPage function.
        doNextPage ();
    }
}
 
function doNextPage ():void
{
    //position the loaderclip as nextPage
    nextPage.x = 238.0;
    nextPage.y = 0;
    //Tween the alpha from 0 to 1
    var tweenAlpha:Tween = new Tween(nextPage, «alpha», Regular.easeOut, 0, 1, .3, true);
    //Add the next page to the stage
    addChild (nextPage);
    //Next page is now our current page — confusing?
    currentPage = nextPage;
 
 
}
//Once the animation is completed we’ll trigger this function
function currentPageOut (event:Event):void
{
    //Remove the current page completely from the stage
    removeChild (currentPage);
    //Let’s show the next page
    doNextPage ();
}
//don’t place a stop command because we will directly land on frame 2.

Наконец, мы продвигаемся на один кадр вверх. Убедитесь, что вы находитесь в кадре 2 мувиклипа menu_total.

01
02
03
04
05
06
07
08
09
10
//add an eventlistener for the mousemove
HOVER.addEventListener(MouseEvent.MOUSE_MOVE, openmenu);
function openmenu(e:Event):void
    {
        //when the mouse x & y values is inside the movieclip clip named «HOVER», the hittest is true
        HOVER.hitTestPoint(parent.mouseX, parent.mouseY, true) {
        gotoAndPlay(«OVER»);
        //make sure we remove the listener so we can’t trigger this by accident.
        HOVER.removeEventListener(MouseEvent.MOUSE_MOVE, openmenu);
}stop();

Теперь перейдите к 24 кадру мувиклипа menu_total.

1
2
3
4
5
6
7
8
9
//add an eventlistener for the mousemove
HOVER_OUT.addEventListener(MouseEvent.MOUSE_MOVE, menuout);
function menuout(e:Event):void
    {
        //when the mouse x & y values is inside the movieclip clip named «HOVER_OUT», the hittest is true
        HOVER_OUT.hitTestPoint(parent.mouseX, parent.mouseY, true) { gotoAndPlay(«OUT»);
        //make sure we remove the listener so we can’t trigger this by accident.
        HOVER_OUT.removeEventListener(MouseEvent.MOUSE_MOVE, menuout);
}stop();

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

1
gotoAndStop(«CLOSED»)

Итак, мы здесь! Вы узнали, как включать / отключать нажатые кнопки в массиве с объединенными данными, использовать методы маскирования и создавать простые, но эффективные системы меню, которые можно использовать с минимальными усилиями. Все это с простым, но эффективным переходом страницы. Надеюсь, вам понравилось это и вы нашли практичный способ ускорить рабочий процесс во Flash.