縦にスライドするナビゲーション

vertical_navigation



マウス位置でメニューの位置もかわるナビゲーションの作り方です
解説はつづきから






今回もTweenMaxを使います
詳しくは以前の記事参照




新規ファイル作成
ステージ設定はサイズを400×300、フレームレートは30に





まずは300×220、角丸半径10の矩形を描きムービークリップシンボルに変換
基準点を左上にし、インスタンス名をmaskMCに





新規シンボル作成からActionScriptに書き出しにチェックを入れて、クラス名をMenuItemに





300×25、色#3399CCの矩形を描き、左上に基準点がくるように位置を0,0に





ダイナミックテキストでテキストを入力、x位置を10に(あとは任意)
インスタンス名をmenuLabelに




シーン1に戻り、新規レイヤーを追加しActionScriptを記述

//TweenMaxをインポート
import gs.*;
import gs.easing.*;

//メニューの数
const num:int = 20;
//メニューをいれるMC
var base:MovieClip = new MovieClip();
//baseにマウスオーバーしてるかどうか
var onBase:Boolean = false;
//baseの初期位置をマスクと同じ位置に
base.x = maskMC.x;
base.y = maskMC.y;
//baseにマスク適用
base.mask = maskMC;
//baseを設置
addChild(base);

for (var i:int = 1; i<=num; i++) {
    //メニューを作成、位置、透明度設定
    var menuItem:MenuItem = new MenuItem();
    menuItem.x = 0;
    menuItem.y = (i-1) * menuItem.height * 1.05;
    menuItem.alpha = 0.5;

    //メニューのテキスト設定(10以下の場合は頭に0をつける)
    if (i<10) {
        menuItem.menuLabel.text = "Menu Label 0"+ i;
    } else {
        menuItem.menuLabel.text = "Menu Label "+ i;
    }
    //テキスト部分のマウスの反応を消す
    menuItem.mouseChildren = false;

    //メニューにマウスオーバー、マウスアウトイベント追加
    menuItem.addEventListener(MouseEvent.MOUSE_OVER, onOverM);
    menuItem.addEventListener(MouseEvent.MOUSE_OUT, onOutM);

    //baseにメニューを設置
    base.addChild(menuItem);
}

function onOverM(e:Event):void {
    //マウスオーバーで透明度とテキストの位置を変える
    TweenMax.to(e.target, 0.5, {alpha:1, ease:Cubic.easeOut});
    TweenMax.to(e.target.menuLabel, 0.5, {x:190, ease:Cubic.easeOut});
}

function onOutM(e:Event):void {
    //マウスアウトで透明度とテキストの位置を元に戻す
    TweenMax.to(e.target, 1, {alpha:0.5, ease:Cubic.easeOut});
    TweenMax.to(e.target.menuLabel, 1, {x:10, ease:Cubic.easeOut});
}

//baseにマウスオーバー、マウスアウトでonBaseを切り替え
base.addEventListener(MouseEvent.MOUSE_OVER, mouseOverMenuF);
base.addEventListener(MouseEvent.MOUSE_OUT, mouseOutMenuF);

function mouseOverMenuF(e:Event):void {
    onBase = true;
}
function mouseOutMenuF(e:Event):void {
    onBase = false;
}

//エンターフレームイベント追加
addEventListener(Event.ENTER_FRAME, loop);

function loop(e:Event):void {
    //onBaseがtrueのとき
    if (onBase) {
        //マウス位置がマスクの高さ分移動するとき
        //baseはbaseとマスクの高さの差分移動するように
        //targetYを設定(端はmenuItemの高さ分調整)
        var dis:Number = mouseY-maskMC.y;
        var dif:Number = base.height-maskMC.height;
        var per:Number = dis/(maskMC.height-menuItem.height);
        var targetY:Number = -(dif*per)+maskMC.y+menuItem.height/2;

        //baseをtargetYの位置に移動
        base.y += (targetY-base.y)/2;

        //端にいったときはそれ以上いかないように設定
        if (base.y>maskMC.y) base.y = maskMC.y;
        if (base.y<maskMC.y-dif) base.y = maskMC.y-dif;
    }
}


これでムービープレビューすると以下のようになってるかと思います







以上、縦にスライドするナビゲーションの作り方でした