青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

twzheng's cppblog

『站在風(fēng)口浪尖緊握住鼠標(biāo)旋轉(zhuǎn)!』 http://www.cnblogs.com/twzheng

  C++博客 :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
  136 隨筆 :: 78 文章 :: 353 評論 :: 0 Trackbacks
Flash ActionScript 3.0 實現(xiàn)的樹形菜單

這是我初學(xué)ActionScript 3.0時實現(xiàn)的treeMenu類, 貼出來分享,或許對ActionScript 3.0的初學(xué)者有一定的幫助,但不建議在應(yīng)用程序開發(fā)中使用。

各位博友可以就此發(fā)表自己的觀點,謝謝各位指教。

下面是treeMenu類的定義:
/**
 *    treeMenu類
 *     
 *    構(gòu)造一個樹形菜單
 *    
 *    @author    twzheng (twzheng@msn.cn)
 *    @date    20070903
 *    @version    1.0.070903
 *    
 
*/


////////////////////////////////////////////////////////////////////////////////////////////
//
    在這里添加修改說明:
//
//
//
//////////////////////////////////////////////////////////////////////////////////////////

package com.components
{
    import flash.display.MovieClip;
    
    public class treeMenu extends MovieClip
    
{
        public 
var rootMenu:menuItem;
        
        
function treeMenu()
        
{
        }

        
        public 
function newTreeMenu()
        
{
            
if(rootMenu != null)
            
{
                trace(
" 錯誤:根菜單已存在,根菜單只能有一個!");
                
return;
            }

            rootMenu 
= new menuItem("rootMenu","rootMenu");
            
if(rootMenu == null)
            
{
                trace(
" 創(chuàng)建根菜單失敗!");
                
return;
            }

            rootMenu.removeChild(rootMenu.menuLabel);
            rootMenu.childMenu.x 
= 0;
            rootMenu.childMenu.y 
= 0;
            
this.addChild(rootMenu);
        }

        
        public 
function addChildMenu(bMenu:menuItem, mName:String, mLabel:String)
        
{
            
var mItem = new menuItem(mName,mLabel);
            
if(mItem == nullreturn;
            
var index:int = bMenu.childItem.length;
            
            mItem.y 
= menuItemLocalizer(bMenu.childItem);
            
            bMenu.childItem[index] 
= mItem;
            
            bMenu.childMenu.addChild(mItem);
        }

        
        private 
function menuItemLocalizer(bMenu:Array):int
        
{
            
var num:int = 0;
            
for each (var item in bMenu)
                num 
= num + item.getHeight();
            
return num;
        }

    }

}


/**
 * 菜單項節(jié)點類
 * 
 * @author    twzheng (http://www.ugocn.com)
 * @date    20070903
 * @version    1.0.070903
 
*/
    

import flash.display.DisplayObjectContainer;
import flash.display.MovieClip;
import flash.text.TextField;
import flash.events.MouseEvent;
import flash.events.Event;
import flash.ui.Mouse;

internal class menuItem extends MovieClip
{
    public 
var menuName:String;            // 菜單項名稱
    public var menuLabel:TextField;        // 菜單項標(biāo)簽(即顯示給用戶的菜單標(biāo)簽)
    public var childMenu:DisplayObjectContainer; // 子菜單項容器
    public var childItem:Array;            // 子菜單項數(shù)組
    
    private 
var h:Number;        // 菜單項高度屬性,記錄的是實際高度(包含隱藏菜單高度)
    
    
function menuItem(mName:String, mLabel:String)
    
{
        
if(mName == "" || mName == null || mLabel == null)
        
{
            trace(
" 菜單名或者菜單標(biāo)簽為空,添加菜單項失敗!");
            
return;
        }

        menuName 
= mName;
        
        menuLabel 
= new TextField();
        menuLabel.text 
= mLabel;
        menuLabel.height 
= 22;
        menuLabel.textColor 
= 0x000000;
        menuLabel.background 
= false;
        menuLabel.addEventListener(MouseEvent.MOUSE_MOVE,itemMouseMove);
        menuLabel.addEventListener(MouseEvent.MOUSE_OUT,itemMouseOut);
        
this.addChild(menuLabel);
        
        childMenu 
= new MovieClip();
        childMenu.addEventListener(Event.ADDED,mcAddedEvent);
        childMenu.addEventListener(Event.REMOVED,mcRemovedEvent);
        
this.childMenu.x = this.menuLabel.x + 8;
        
this.childMenu.y = this.menuLabel.y + this.menuLabel.height;
        
this.addChild(childMenu);
        
        childItem 
= new Array();
        
        
this.h = menuLabel.height;
        
// 菜單項單擊事件應(yīng)留給外部使用者實現(xiàn)
        //this.menuLabel.addEventListener(MouseEvent.CLICK,itemClick);
    }

    
    
// 返回菜單項顯示的真實高度,即菜單項的實際高度減去隱藏菜單項的高度
    public function getHeight():Number
    
{
        
return h - getHideMenu(this);
    }

    
    
/**
    * 獲取item的childMenu中所有隱藏子菜單項的高度和
    *
    * @item                主菜單項,此函數(shù)即計算它的子菜單中隱藏菜單的高度
    * @return            返回item的childMenu中visible屬性為false的子菜單高度和
    * 
    * 注:如果item.childMenu的visible屬性為false即返回childMenu的高度,如果item.childMenu為空則返回0。
    
*/

    private 
function getHideMenu(item:menuItem):Number
    
{
        
var sumHeight = 0;
        
if(item.childMenu.visible)
        
{
            
if(item.childItem == null)
                
return 0;
            
for(var i = 0; i < item.childItem.length; i++)
            
{
                
// 對每個子菜單項遞歸
                sumHeight = sumHeight + getHideMenu(item.childItem[i]);
            }

            
return sumHeight;
        }

        
else
            
return item.childMenu.height;
    }

    
    
/**
    * 獲取名字為mName菜單項的對象
    *
    * @mName            菜單項名字字符串
    * @return            返回調(diào)用此函數(shù)的菜單項的子菜單中名字為mName的子菜單項對象
    
*/

    public 
function getMenu(mName:String):menuItem
    
{
        
for each(var item in childItem)
        
{
            
if(item.menuName == mName)
                
return item;
        }

        trace(
" 錯誤:不存在名為 " + mName + " 的子菜單項!");
        
return null;
    }

    
    
/**
    * 接收TextField的單擊事件,更改TextField對應(yīng)item的子菜單顯示狀態(tài)
    *
    * @item            接收到單擊事件的menuLabel對應(yīng)的菜單項(menuItem)
    
*/

    public 
function chgChildItemVisible(item:menuItem)
    
{
        
var chgHeight = 0;
        
if(item.childMenu.visible)
        
{
            chgHeight 
= item.getHeight() - item.menuLabel.height;
            item.childMenu.visible 
= false;
            updateMenu(item,
0 - chgHeight);
        }

        
else
        
{
            item.childMenu.visible 
= true;
            chgHeight 
= item.childMenu.height - getHideMenu(item);
            updateMenu(item,chgHeight);
        }

    }

    
    
/**
    * 更新各菜單項位置
    * 注:由于參數(shù)item的子菜單容器childMenu高度發(fā)生變化而需要改變其同級別的菜單項以及所有的父菜單項的y坐標(biāo)
    *
    * @item            引發(fā)調(diào)用此函數(shù)的菜單項(即由于item的childMenu高度改變而需要調(diào)用此函數(shù))
    * @chgHeight    需要改變的y坐標(biāo)高度,正值即增加y坐標(biāo)值,負值減小y坐標(biāo)值
    
*/

    private 
function updateMenu(item:menuItem, chgHeight:Number)
    
{
        
if(item == nullreturn;
        
// item.parent為父菜單的子菜單容器,item.parent.paren才是對應(yīng)的父菜單項
        var parentItem = item.parent.parent;

        
var i,index:int = 0;
        
        
if(parentItem == null || ! (parentItem is menuItem))
            
return;
        
        
// 搜索item在父菜單的子菜單數(shù)組childItem中的索引
        index = parentItem.childItem.indexOf(item);
        
        
// 改變item同級別的并且位于其后的菜單項的顯示位置
        for(i = index + 1; i < parentItem.childItem.length; i++)
        
{
            parentItem.childItem[i].y 
= parentItem.childItem[i].y + chgHeight;
        }

        
        
// 對父菜單項遞歸
        updateMenu(parentItem,chgHeight);
    }

    
//    private function itemClick(e:MouseEvent)
//
    {
//
        var item = e.currentTarget;
//
        chgChildItemVisible(item.parent);
//
    }
    
    private 
function itemMouseMove(e:MouseEvent)
    
{
        
var item = e.currentTarget;
        item.background 
= true;
        item.backgroundColor 
= 0x66ccFF;
        item.textColor 
= 0x0000FF;
    }

    
    private 
function itemMouseOut(e:MouseEvent)
    
{
        
var item = e.currentTarget;
        item.background 
= false;
        item.backgroundColor 
= 0xFFFFFF;
        item.textColor 
= 0x000000;
    }

    
    
// 向子菜單容器加入子菜單項事件,增加當(dāng)前菜單的高度
    private function mcAddedEvent(e:Event)
    
{// 此事件響應(yīng)函數(shù)還需要更改。。。
        var mc = e.currentTarget;
        h 
= h + 22;//mc.height;///2
    }

    
    
// 從子菜單容器移除子菜單項事件,減小當(dāng)前菜單的高度
    private function mcRemovedEvent(e:Event)
    
{// 此事件響應(yīng)函數(shù)還需要更改。。。
        var mc = e.currentTarget;
        h 
= h - 22;//mc.height/2;
    }

}



treeMenu類簡單應(yīng)用
package 
{
    import flash.display.MovieClip;    
    import flash.events.
*;

    import com.library.treeMenu;
    
    public class menu extends MovieClip
    
{
        
function menu()
        
{
            
var tm = new treeMenu();
            tm.newTreeMenu();            
// 創(chuàng)建根菜單
            
            tm.addChildMenu(tm.rootMenu,
"基菜單-01","基菜單-01");
            tm.rootMenu.getMenu(
"基菜單-01").menuLabel.addEventListener(MouseEvent.CLICK,eventClick);
            
            tm.addChildMenu(tm.rootMenu.getMenu(
"基菜單-01"),"一級菜單-011","一級菜單-011");
            
            tm.addChildMenu(tm.rootMenu,
"基菜單-02","基菜單-02");
            tm.rootMenu.getMenu(
"基菜單-02").menuLabel.addEventListener(MouseEvent.CLICK,eventClick);
            
            tm.addChildMenu(tm.rootMenu.getMenu(
"基菜單-02"),"一級菜單-021","一級菜單-021");
            tm.rootMenu.getMenu(
"基菜單-02").getMenu("一級菜單-021").menuLabel.addEventListener(MouseEvent.CLICK,eventClick);
            
            tm.addChildMenu(tm.rootMenu.getMenu(
"基菜單-02").getMenu("一級菜單-021"),"二級菜單-0211","二級菜單-0211");
            tm.rootMenu.getMenu(
"基菜單-02").getMenu("一級菜單-021").getMenu("二級菜單-0211").menuLabel.addEventListener(MouseEvent.CLICK,eventClick);
            
            tm.addChildMenu(tm.rootMenu.getMenu(
"基菜單-02").getMenu("一級菜單-021").getMenu("二級菜單-0211"),"三級菜單-02111","三級菜單-02111");
            tm.addChildMenu(tm.rootMenu,
"基菜單-03","基菜單-03");
            
            
// 菜單坐標(biāo) 默認坐標(biāo)(0,0)
            //tm.x = 50;
            //tm.y = 50;
            this.addChild(tm);
        }

        
        private 
function eventClick(e:MouseEvent)
        
{
            
var item = e.currentTarget;
            item.parent.chgChildItemVisible(item.parent);    
// 隱藏或顯示子菜單項
        }

    }

}


posted on 2007-10-19 00:51 譚文政 閱讀(3182) 評論(9)  編輯 收藏 引用 所屬分類: Flash AS 3.0

評論

# re: ActionScript 3.0 實現(xiàn)樹形菜單(TreeMenu) 2007-10-19 07:43 Minidx全文檢索
非C++,屬于其它技術(shù)哦  回復(fù)  更多評論
  

# re: ActionScript 3.0 實現(xiàn)樹形菜單(TreeMenu) 2007-10-19 07:43 Minidx全文檢索
非C++,屬于其它技術(shù)哦  回復(fù)  更多評論
  

# re: ActionScript 3.0 實現(xiàn)樹形菜單(TreeMenu) 2007-10-19 12:53 苦味酸
對,這是用Flash ActionScript 3.0 實現(xiàn)的。

由于項目的需要,前段時間改學(xué)Flash ActionScript 3.0了,覺得自己越學(xué)越雜,但計算機語言都是相通的,大同小異,重要的是設(shè)計思想,軟件的架構(gòu)。我現(xiàn)在比較熟悉的語言是C++/C#和ActionScript 3.0。  回復(fù)  更多評論
  

# re: ActionScript 3.0 實現(xiàn)樹形菜單(TreeMenu)[未登錄] 2008-02-26 21:15 小小菜鳥
wangyan.work@qq.com

發(fā)個源文件吧,謝謝  回復(fù)  更多評論
  

# re: ActionScript 3.0 實現(xiàn)樹形菜單(TreeMenu)[未登錄] 2008-02-26 21:34 小小菜鳥
能拖動節(jié)點換位置,給節(jié)點改名,添件刪除節(jié)點,就美了,呵呵
  回復(fù)  更多評論
  

# re: ActionScript 3.0 實現(xiàn)樹形菜單(TreeMenu) 2008-10-17 17:08 hfydm
編譯不能通過,相關(guān)信息:1046: Type was not found or was not a compile-time constant: menuItem.  回復(fù)  更多評論
  

# re: ActionScript 3.0 實現(xiàn)樹形菜單(TreeMenu) 2009-02-18 09:09 needi
這個怎么用啊。。有沒有實例?。?????  回復(fù)  更多評論
  

# re: ActionScript 3.0 實現(xiàn)樹形菜單(TreeMenu) 2009-11-19 18:46 路過的人
拜讀了,謝謝  回復(fù)  更多評論
  

# re: ActionScript 3.0 實現(xiàn)樹形菜單(TreeMenu) 2012-04-05 09:10 fds
灰常感謝  回復(fù)  更多評論
  


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            日韩视频精品| 精品88久久久久88久久久| 狠狠色丁香婷婷综合久久片| 亚洲女人av| 亚洲欧洲日产国产综合网| 久久精品系列| 亚洲欧美精品| 国产欧美日韩中文字幕在线| 午夜激情久久久| 午夜视频在线观看一区二区| 国产在线精品成人一区二区三区| 欧美专区在线| 久久久久久久久岛国免费| 国产一区二区三区的电影| 久久嫩草精品久久久精品| 久久精品国产精品亚洲综合 | 在线视频一区二区| 欧美日韩在线播放三区| 亚洲图片欧美一区| 亚洲在线电影| 最新日韩中文字幕| 亚洲精品免费观看| 国产日韩欧美一区| 欧美xxx成人| 欧美精品乱码久久久久久按摩| 亚洲蜜桃精久久久久久久| 久热精品视频在线免费观看| 999在线观看精品免费不卡网站| 一区二区激情视频| 国内揄拍国内精品少妇国语| 欧美一区二区三区另类| 尤物yw午夜国产精品视频明星| 亚洲国产高清aⅴ视频| 欧美日韩成人在线| 久久久久**毛片大全| 欧美激情在线狂野欧美精品| 亚洲福利视频专区| 夜夜嗨av一区二区三区四季av| 午夜精品久久久久久99热| 亚洲日韩成人| 久久成人精品电影| 免费亚洲电影在线| 国产伦精品一区二区三区免费| 欧美国产日韩亚洲一区| 国产精品无码永久免费888| 亚洲高清久久网| 99re成人精品视频| 国产精品国产三级国产专播品爱网| 久久国产精品高清| 在线看无码的免费网站| 亚洲免费视频中文字幕| 久久男人资源视频| 日韩午夜电影| 国产精品毛片va一区二区三区| 欧美国产视频在线观看| 一本色道久久综合亚洲精品不卡| 欧美调教视频| 亚洲人www| 欧美一区二区三区久久精品茉莉花| 欧美激情一区三区| 亚洲综合第一页| 米奇777超碰欧美日韩亚洲| 亚洲作爱视频| 国产亚洲欧美aaaa| 欧美高清视频| 亚洲国产福利在线| 欧美一级精品大片| 国产精品一二| 免费一级欧美片在线观看| 久久婷婷成人综合色| 国产日本欧美在线观看| 久久久精品性| 久久精品亚洲精品| 99这里只有久久精品视频| 国产一区二区电影在线观看| 欧美黄在线观看| 久久精品30| 亚洲一区二区免费| 亚洲娇小video精品| 久久免费视频在线观看| 亚洲一区图片| 国产精品视频免费观看| 免费亚洲电影在线| 久久大逼视频| 亚洲午夜精品福利| 欧美一区亚洲一区| 一本色道久久综合亚洲二区三区| 黄色精品网站| 国产欧美一区二区精品婷婷 | 久久频这里精品99香蕉| 久久综合色影院| 亚洲电影在线| 久久久精品国产免费观看同学| 日韩一区二区免费看| 亚洲一区二区在线免费观看| 91久久精品美女| 精品成人一区| 国产深夜精品福利| 国产精品丝袜xxxxxxx| 欧美丝袜第一区| 欧美绝品在线观看成人午夜影视| 9国产精品视频| 亚洲一区二区在线视频| 日韩亚洲欧美成人一区| 亚洲第一视频| 亚洲第一色在线| 亚洲国产欧美不卡在线观看| 欧美国产日韩在线| 欧美成人综合在线| 亚洲系列中文字幕| 亚洲婷婷免费| 亚洲欧美不卡| 亚洲欧美一区二区三区久久 | 亚洲午夜精品一区二区三区他趣| 国产精品高清在线| 欧美日韩精品一区视频| 欧美人与性禽动交情品 | 国产色综合天天综合网| 国产一区二区久久精品| 国产主播一区| 在线视频国产日韩| 亚洲国产日韩欧美在线99| 亚洲欧洲在线播放| 99精品国产在热久久婷婷| 一区二区av| 午夜欧美不卡精品aaaaa| 久久国产手机看片| 久久综合影视| 亚洲高清网站| 这里是久久伊人| 午夜精品成人在线| 久久五月婷婷丁香社区| 欧美激情第1页| 国产精品久久影院| 精品成人一区二区| 在线视频日本亚洲性| 伊人狠狠色丁香综合尤物| 亚洲第一毛片| 亚洲免费在线电影| 久久久夜精品| 亚洲人被黑人高潮完整版| 亚洲午夜一区二区三区| 久久久精品网| 欧美日韩中文字幕精品| 国产一区二区在线观看免费播放 | 亚洲国产精品久久久久婷婷老年 | 亚洲电影欧美电影有声小说| 亚洲精品欧美日韩| 久久女同互慰一区二区三区| 欧美国产日韩xxxxx| 一区电影在线观看| 久久久久久免费| 欧美日在线观看| 在线视频观看日韩| 亚洲欧美制服另类日韩| 欧美激情bt| 欧美亚洲免费| 欧美日韩免费精品| 亚洲福利一区| 久久精品国产免费看久久精品| 亚洲春色另类小说| 亚洲国产欧美在线| 欧美黄色一级视频| 性xx色xx综合久久久xx| 欧美日韩免费观看中文| 一区在线免费观看| 欧美一区二区成人| 亚洲精品男同| 乱人伦精品视频在线观看| 模特精品在线| 国产午夜精品全部视频播放| 99国内精品久久久久久久软件| 久久视频这里只有精品| 亚洲天堂成人在线视频| 免费在线欧美黄色| 伊人精品视频| 久久精品国产精品亚洲综合| 日韩视频免费| 欧美激情一区三区| 亚洲激情视频网站| 久久综合色播五月| 欧美在线视频a| 麻豆精品精华液| 国产一区欧美| 欧美自拍偷拍午夜视频| 亚洲一区国产一区| 欧美视频在线一区二区三区| 一本一本久久a久久精品综合妖精 一本一本久久a久久精品综合麻豆 | 亚洲一区二区三区精品视频| 久久久久天天天天| 欧美有码在线观看视频| 国产伦精品一区二区三区在线观看 | 亚洲已满18点击进入久久| 欧美性猛交一区二区三区精品| 欧美午夜不卡视频| 亚洲午夜视频| 亚洲夜间福利| 国产亚洲欧美激情| 美女国产一区| 欧美成人资源|