【问题标题】:Dynamic Flash Navigation Menu动态 Flash 导航菜单
【发布时间】:2011-01-26 01:43:24
【问题描述】:

我正在尝试创建一个动态 Flash 导航菜单,该菜单将禁用您所在页面的按钮,使该按钮处于“点击”状态,然后在您调用新页面并停用新按钮后将其激活.

我知道这可以通过电影剪辑和一些老式的 gotoAndPlay/Stop 来完成,但我想在 actionscript 中执行此操作,这样它就可以很好地、干净且可扩展地用于其他项目。

我已经在 zip 文件中发布了我的尝试

http://www.webstudioproductions.com/navtry.zip

请在任何帮助下重播

//编辑添加

我从一个 php 包含函数中调用这个 swf。当我在当前状态下尝试 swf 时,除了主页停用的主页和本应关闭的主页之外的所有按钮都让用户滚动并变为活动状态。

stop();

//get page string

var pageURL:String=ExternalInterface.call('window.location.href.toString');

//set up website pages

var homeURL:String=('http://www.webstudioproductions.com/index.html');
var servicesURL:String=('http://www.webstudioproductions.com/services.html');
var portfolioURL:String=('http://www.webstudioproductions.com/portfolio.html');
var associatesURL:String=('http://www.webstudioproductions.com/associates.html');
var contactusURL:String=('http://www.webstudioproductions.com/contactus.html');

// show rollover state of pageURL

function pageLoad():void {

 if(pageURL==homeURL) {

  nav.nav_home.gotoAndPlay("hit");

 }else if(pageURL==servicesURL){

  nav.nav_service.gotoAndPlay("hit");

 }else if(pageURL==portfolioURL){

  nav.nav_portfolio.gotoAndPlay("hit");

 }else if(pageURL==associatesURL){

  nav.nav_associates.gotoAndPlay("hit");

 }else if(pageURL==contactusURL){

  nav.nav_contactus.gotoAndPlay("hit");

 }else{
  gotoAndStop(1);
 }
}
pageLoad();




/* main nav  */

nav.nav_home.buttonMode = true;
nav.nav_home.addEventListener(MouseEvent.ROLL_OVER, onButtonOver);
nav.nav_home.addEventListener(MouseEvent.ROLL_OUT, onButtonOut);
nav.nav_home.addEventListener(MouseEvent.CLICK, nav_homeClick);

nav.nav_service.buttonMode = true;
nav.nav_service.addEventListener(MouseEvent.ROLL_OVER, onButtonOver);
nav.nav_service.addEventListener(MouseEvent.ROLL_OUT, onButtonOut);
nav.nav_service.addEventListener(MouseEvent.CLICK, nav_serviceClick);

nav.nav_portfolio.buttonMode = true;
nav.nav_portfolio.addEventListener(MouseEvent.ROLL_OVER, onButtonOver);
nav.nav_portfolio.addEventListener(MouseEvent.ROLL_OUT, onButtonOut);
nav.nav_portfolio.addEventListener(MouseEvent.CLICK, nav_portfolioClick);

nav.nav_associates.buttonMode = true;
nav.nav_associates.addEventListener(MouseEvent.ROLL_OVER, onButtonOver);
nav.nav_associates.addEventListener(MouseEvent.ROLL_OUT, onButtonOut);
nav.nav_associates.addEventListener(MouseEvent.CLICK, nav_associatesClick);

nav.nav_contactus.buttonMode = true;
nav.nav_contactus.addEventListener(MouseEvent.ROLL_OVER, onButtonOver);
nav.nav_contactus.addEventListener(MouseEvent.ROLL_OUT, onButtonOut);
nav.nav_contactus.addEventListener(MouseEvent.CLICK, nav_contactusClick);

function onButtonOver(e:MouseEvent):void
{
 e.currentTarget.gotoAndPlay("over");
}

function onButtonOut(e:MouseEvent):void
{
 e.currentTarget.gotoAndPlay("out");
}




/* main nav */

function nav_homeClick(e:MouseEvent):void
{
 var nav_homeURL:URLRequest = new URLRequest ("http://www.webstudioproductions.com/index.html");
 navigateToURL(nav_homeURL, "_parent");
}

function nav_serviceClick(e:MouseEvent):void
{
 var nav_serviceURL:URLRequest = new URLRequest ("http://www.webstudioproductions.com/services.html");
 navigateToURL(nav_serviceURL, "_parent");
}

function nav_portfolioClick(e:MouseEvent):void
{
 var nav_portfolioURL:URLRequest = new URLRequest ("http://www.webstudioproductions.com/portfolio.html");
 navigateToURL(nav_portfolioURL, "_parent");
}

function nav_associatesClick(e:MouseEvent):void
{
 var nav_associatesURL:URLRequest = new URLRequest ("http://www.webstudioproductions.com/associates.html");
 navigateToURL(nav_associatesURL, "_parent");
}

function nav_contactusClick(e:MouseEvent):void
{
 var nav_contactusURL:URLRequest = new URLRequest ("http://www.webstudioproductions.com/contactus.html");
 navigateToURL(nav_contactusURL, "_parent");
}

【问题讨论】:

    标签: flash actionscript-3 actionscript nav


    【解决方案1】:

    MovieClip 是一个动态类,因此您可以为其赋予额外的属性。解决这个问题的一种方法是给每个菜单项一个 isSelected 布尔值。然后在父类中,您将所有项目存储在一个数组中并控制所选值。

    我使用的简单系统是这样的

    给每个菜单一个 isSelected 布尔值
    如果 isSelected == true
    则阻止取消选择动画 将所有菜单按钮存储在一个数组中
    为每个菜单项创建一个 setOn 和 setOff 函数
    按下菜单时,循环遍历所有按钮并更新所选状态

    function onButtonOut(e:MouseEvent):void
    {
         if(!isSelected) e.currentTarget.gotoAndPlay("out");
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多