⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 用as2.0写导航菜单 .txt

📁 用as2.0写导航菜单的程序
💻 TXT
📖 第 1 页 / 共 3 页
字号:
用as2.0写导航菜单 
作者:FreeBrandy   类型:闪吧BBS   来源:闪吧  介绍:95%以上用脚本实现,直接修改XML文件就可以改变菜单内容。 
这个是教程
http://public.iecn.net/freebrandy/menu/myMenuBar.html
这个是成品(当然大家可以改得更好了)
http://public.iecn.net/freebrandy/menu/myMenuBar.htm
演示效果:http://public.iecn.net/freebrandy/menu/myMenuBar.htm

说明:
这是用AS2.0类(FlashMX专业版2004)写的一个动态菜单。菜单的标题及链接用XML文件贮存,SWF文件导入XML文件后进行XML分析,
把数据存入数组中,再根据数组的内容动态建立主菜单及各子菜单,可在源文件中设置子菜单的排列方式,如示例所示。
另外,针对lable文字不可能通过脚本来进行美化的问题,可以加上动态载入图片代替原背景图片功能,图片的位置也放在XML文件中,
在建立菜单时动态导入。
大家可以把SWF文件和menuData.xml下载后测试,要注意menuData.xml文件是UTF-8码格式的,可以改动,但要保证格式符合规律(有子
菜单的一定没有url,反之则有)。
menuData.xml(贮存菜单数据的XML文件)
<?xml version="1.0" encoding="utf-8" ?> 
<mymenu> 
 <mainmenu url="1.asp" lable="1"> 
 </mainmenu> 
 <mainmenu lable="2"> 
  <submenu url="2.1.asp" lable="2.1" /> 
  <submenu url="2.2.asp" lable="2.2" /> 
  <submenu url="2.3.asp" lable="2.3" /> 
  <submenu url="2.4.asp" lable="2.4" /> 
 </mainmenu> 
 <mainmenu lable="3"> 
  <submenu url="3.1.asp" lable="3.1" /> 
  <submenu url="3.2.asp" lable="3.2" /> 
  <submenu url="3.3.asp" lable="3.3" /> 
 </mainmenu> 
 <mainmenu lable="4"> 
  <submenu url="4.1.asp" lable="4.1" /> 
  <submenu url="4.2.asp" lable="4.2" /> 
  <submenu url="4.3.asp" lable="4.3" /> 
  <submenu url="4.4.asp" lable="4.4" /> 
 </mainmenu> 
 <mainmenu lable="5"> 
  <submenu url="5.1.asp" lable="5.1" /> 
  <submenu url="5.2.asp" lable="5.2" /> 
  <submenu url="5.3.asp" lable="5.3" /> 
  <submenu url="5.4.asp" lable="5.4" /> 
  <submenu url="5.5.asp" lable="5.5" /> 
 </mainmenu> 
 <mainmenu lable="6"> 
  <submenu url="6.1.asp" lable="6.1" /> 
  <submenu url="6.2.asp" lable="6.2" /> 
  <submenu url="6.3.asp" lable="6.3" /> 
 </mainmenu> 
 <mainmenu lable="7"> 
  <submenu url="7.1.asp" lable="7.1" /> 
  <submenu url="7.2.asp" lable="7.2" /> 
 </mainmenu> 
</mymenu>
MenuXMLModel.as(进行XML文件分析的as2.0类)


import mx.events.EventDispatcher; 
class MenuXMLModel extends XML { 
 private var mainmenu:Array; 
 private var submenu:Array; 
 public var addEventListener:Function; 
 public var removeEventListener:Function; 
 private var dispatchEvent:Function; 
 private static var _mixin1 = EventDispatcher.initialize(MenuXMLModel.prototype); 
  
 public function MenuXMLModel() { 
  mainmenu = new Array(); 
  submenu = new Array(); 
  ignoreWhite = true; 
 } 
 private function onLoad():Void { 
  var tempA = new Array(); 
  var tempB = new Array(); 
  tempA = this.firstChild.childNodes; 
  for (var i=0; i<tempA.length; i++){ 
   mainmenu[i]=[tempA[i].attributes.lable,tempA[i].attributes.url]; 
   tempB = tempA[i].childNodes; 
   var tempC = new Array(); 
   for (var j=0; j<tempB.length; j++){ 
    tempC[j]=[tempB[j].attributes.lable,tempB[j].attributes.url]; 
   } 
   submenu[i]=tempC; 
   delete tempC; 
  } 
  this.dispatchEvent({type:"onMenuDataLoaded", target:this}); 
 } 
 public function getMainMenuArray():Array { 
  return mainmenu; 
 } 
 public function getSubMenuArray():Array { 
  return submenu; 
 } 
}
MenuView.as(as2.0类,用于设置单个菜单项目的属性)


class MenuView extends MovieClip { 
  
 private var _menuLable; 
 private var _menuUrl; 
 private var _sn; 
  
 private function MenuView() { 
 } 
  
 public function set menuLable(i:String):Void { 
  _menuLable.text = i; 
 } 
 public function set menuUrl(i:String):Void { 
  _menuUrl = i; 
 } 
 public function set sn(i:Number):Void { 
  _sn = i; 
 }  
 public function get menuUrl():String { 
  return _menuUrl; 
 } 
 public function get menuLable():String { 
  return _menuLable.text; 
 } 
 public function get sn():Number { 
  return _sn; 
 } 
}
MenuPresenter.as(表示器,用来组织如何显示菜单的as2.0类)


import MenuXMLModel; 
class MenuPresenter extends MovieClip { 
  
 private var _totalMenuItem:Number; 
 private var _menu_xml:MenuXMLModel; 
 private var mainMenuArray:Array; 
 private var subMenuArray:Array; 
 private var menuBarWidth:Number = Stage.width; 
 private var menuBarHeigth:Number = 22; 
 private var menuBarX:Number; 
 private var menuBarY:Number; 
 private var subMenuBarRow:Boolean = false; 
  
 public function MenuPresenter() { 
  _menu_xml = new MenuXMLModel(); 
  this.loadXML("menuData.xml"); 
 } 
  
 private function onMenuDataLoaded():Void { 
  //得到贮存菜单数据的数组及菜单数量 
  mainMenuArray=_menu_xml.getMainMenuArray(); 
  subMenuArray =_menu_xml.getSubMenuArray(); 
  _totalMenuItem = mainMenuArray.length; 
   
  //设定整个菜单的位置参数值 
  menuBarX = 0; 
  menuBarY = 0; 
  //设定单个菜单的宽度 
  var menuWidth:Number = menuBarWidth/_totalMenuItem; 
   
  //一次性把主菜单及所有的下拉MC都建立,使用户访问更快 
  //主菜单 
  var menuBar:MovieClip; 
  var menuItem:MovieClip; 
  menuBar=this.createEmptyMovieClip("mainMenuBar",100); 
  menuBar._x = menuBarX; 
  menuBar._y = menuBarY; 
  for (var i = 0; i<_totalMenuItem; i++) { 
   menuItem = menuBar.attachMovie("MenuItem", "MenuItem_"+i, 100+i); 
   menuItem._width = menuWidth; 
   menuItem._x = menuWidth/2 + i*menuWidth; 
   menuItem.menuLable = mainMenuArray[i][0]; 
   //根据是否存在下拉菜单进行设置 
   if (mainMenuArray[i][1]==undefined) { 
    menuItem.sn=i; 
    menuItem.onRollOver=function(){ 
     var owner:Object = this._parent._parent; 
     owner.showSubMenu(this.sn); 
    } 
    menuItem.onPress=function(){ 
     //这里加上条件判断是对用户试探性点击做出的回应 
     var owner:Object = this._parent._parent; 
     var tempMC:MovieClip = eval(owner+"."+this.sn); 
     if (tempMC._visible == true){ 
      owner.closeSubMenu(this.sn) 
     }else{ 
      owner.showSubMenu(this.sn); 
     } 
    } 
   }else{ 
    menuItem.menuUrl = mainMenuArray[i][1]; 
    menuItem.onPress=function(){ 
     //测试用 
     _root.url.text=this.menuUrl+" will be loaded."; 
     //getURL(this.menuUrl); 
    } 
   } 
  } 
  //建立各子菜单 
  var subMenuBar:MovieClip; 
  var subMenuItem:MovieClip; 
  //子菜单的数量根据XML文件内容确定 
  for (var i = 0; i<_totalMenuItem; i++){ 
   //对于只有一级菜单的不建立子菜单(主菜单有lable且有url说明没有下级菜单) 
   if (mainMenuArray[i][1]!=undefined) continue;  
    
   //这是放置子菜单的MC(用i来设置新名称是为了方便控制,因为这个i也就是菜单对应数据在数组中的位置) 
   //子菜单的位置应该由上级菜单位置确定,这样美观,但得根据数量动态设定,有一定难度 
   subMenuBar = this.createEmptyMovieClip(i,i); 
   subMenuBar._visible = false;  
   subMenuBar._x = menuBarX + i*menuWidth + menuWidth/2; 
   subMenuBar._y = menuBarY + menuBarHeigth + 1; 
   //每个子菜单里的MC 
   var n:Number=0; 
   for (var j=0; j<subMenuArray[i].length; j++){ 
    subMenuItem = subMenuBar.attachMovie("MenuItem", "subMenuItem_"+n, 100+n); 
    //根据subMenuBarRow的真假来确定子菜单是横排还是竖排 
    if (subMenuBarRow){ 
     subMenuItem._width = menuWidth; 
     subMenuItem._x = j*menuWidth; 
    }else{ 
     subMenuItem._width = menuWidth; 
     //subMenuItem._x = menuWidth; 
     subMenuItem._y = j*(menuBarHeigth+1); 
    } 
    subMenuItem.menuLable = subMenuArray[i][j][0]; 
    //下面是用hitTest来确定是否关闭子菜单,这是一个关键性技巧 
    subMenuItem.onRollOut=function(){ 
     if (!this._parent.hitTest(_root._xmouse, _root._ymouse, false)){ 
      this._parent._visible = false; 
     }     
    } 
    subMenuItem.menuUrl = subMenuArray[i][j][1]; 
    subMenuItem.onPress=function(){ 
     //测试用 
     _root.url.text=this.menuUrl+" will be loaded."; 
     //getURL(this.menuUrl); 
    } 
    n++; 
   } 
  } 
   
  delete mainMenuArray; 
  delete subMenuArray; 
  delete _menu_xml; 
 } 
  
 private function showSubMenu(i:Number):Void { 
  for (var j=0; j<_totalMenuItem; j++){ 
   var tempMC:MovieClip = eval("this."+j); 
   if (i!=j){ 
    tempMC._visible = false; 
   }else{ 
    tempMC._visible = true; 
   } 
  } 
 } 
 private function closeSubMenu(i:Number):Void { 
  var tempMC:MovieClip = eval("this."+i); 
  tempMC._visible = false; 
 } 
 //给外界提供的导入XML文件方法   
 public function loadXML(xn:String):Void { 
  _menu_xml.load(xn); 
  _menu_xml.addEventListener("onMenuDataLoaded", this); 
 } 
 //给外界提供设置子菜单的排列方向的方法 
 public function set Row(i:Boolean):Void { 
  subMenuBarRow = i; 
 } 
} 

/* 
数组结构图 
  |-0 [lable,url] 
  |-1 [lable,url] 
mainMenuArray  -|-2 [lable,url] 
  |-3 [lable,url] 
  |-4 [lable,url] 
       |-0 [lable,url] 
        |-1 [lable,url] 
  |-0 -|-2 [lable,url] 
  |-1  |-3 [lable,url] 
subMenuArray   -|-2 
  |-3  |-0 [lable,url] 
  |-4 -|-1 [lable,url] 
       |-2 [lable,url] 
*/


 


import mx.events.EventDispatcher; 
class MenuXMLModel extends XML { 
 private var mainmenu:Array; 
 private var submenu:Array; 
 public var addEventListener:Function; 
 public var removeEventListener:Function; 
 private var dispatchEvent:Function; 
 private static var _mixin1 = EventDispatcher.initialize(MenuXMLModel.prototype); 
  
 public function MenuXMLModel() { 
  mainmenu = new Array(); 
  submenu = new Array(); 
  ignoreWhite = true; 
 } 
 private function onLoad():Void { 
  var tempA = new Array(); 
  var tempB = new Array(); 
  tempA = this.firstChild.childNodes; 
  for (var i=0; i<tempA.length; i++){ 
   mainmenu[i]=[tempA[i].attributes.lable,tempA[i].attributes.url]; 
   tempB = tempA[i].childNodes; 
   var tempC = new Array(); 
   for (var j=0; j<tempB.length; j++){ 
    tempC[j]=[tempB[j].attributes.lable,tempB[j].attributes.url]; 
   } 
   submenu[i]=tempC; 
   delete tempC; 
  } 
  this.dispatchEvent({type:"onMenuDataLoaded", target:this}); 
 } 
 public function getMainMenuArray():Array { 
  return mainmenu; 
 } 
 public function getSubMenuArray():Array { 
  return submenu; 
 } 
}
MenuView.as(as2.0类,用于设置单个菜单项目的属性)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -