您的位置: 首页 > 技术文档 > 多媒体制作 > XML动态菜单
巧用Bitmap类制作按钮 回到列表 Flash破解与加密
 XML动态菜单

作者:markmaoji 时间: 2007-01-29 文档类型:原创 来自:蓝色理想

第 1 页 XML动态菜单 [1]
第 2 页 XML动态菜单 [1]

大家都喜欢XML,因为它省事,我平时做东西也尽可能的用XML,因为实在是日后更新修改太方便了,都不用动fla源文件。

本XML系列教程将分三部分发布,到最后一期我们将拥有一个功能全面,更加友好的XML菜单。本教程这个第一期涉及到了一些XML的基础知识。

这里我们要做的效果是一个纵向排列的动态XML的菜单,并且当鼠标滑动到菜单上显示相应的缩略图,这个我们在很多摄影作品展示flash网站经常见到的。在线展示:http://www.keyframe1.com/tute/xmlMenu/

第一步, 分析项目

组成部分:
      - XML文件;
      - FLASH源文件;
      - 缩略图JPG文件,50px X 50px 存放在 thumb文件夹;
 步骤:
      - 先写XML文件 (这个很简单,我们将不再讲怎么写XML文件);
      - 在FLASH中建立所需元素;
      - actionscripting

第二步,开始建立我们需要的一些元素,并把它们摆到大概理想的位置

  •  一个放所有缩略图的母影片剪辑,我们叫做container 50px宽,高尽量大些;
  • 一个遮罩影片剪辑,叫做mask 50px X 50 px;
  • 一个外框影片剪辑,只是为了美观,叫做br,尺寸比mask大一圈就可以了;
  • 把这三个影片剪辑在工作去摆到大概理想的位置,确定它们的X坐标,Y坐标无所谓因为下面我们要用AS来控制它们的Y坐标的;

(好了,主时间工作区的事情就是这些,现在我们建立一个代码的图层,把剩下所有的工作交给actionscript)

第三步,actionscripting

//先声明一些变量

var menut:Number = 30; //菜单顶部Y坐标
var menul:Number = 300; //菜单左侧X坐标
var home:MovieClip = this;
var mlh:Number = 20; //菜单文字行距
var tlh:Number = 60; //缩略图行距
var speed:Number = 3; //缓动速度

//建立XML对象,提取XML数据,建立菜单的鼠标滑动触发的缩略图,遮罩影片剪辑的代码... 内容较多,尽量解释

var myx:XML = new XML();
myx.ignoreWhite = true;
myx.onLoad = function()
{
    var nodes = this.firstChild.childNodes; //提取XML数据
    numMenu = nodes.length; //使用XML的关键,这个变量自动储存XML数据的节数,这样日后我们就可以只更新(添加/减少)XML文件 Flash就会自动更新
    for(var i=0; i<numMenu; i++)
    {
        //建立子影片剪辑载入缩略图
        var holder:MovieClip = container.createEmptyMovieClip("holder" + i, i); //在母影片剪辑里建立相等数量的字影片剪辑以载入缩略图
        container["holder" + i]._x = 0; //定位
        container["holder" + i]._y = tlh * i;
        container["holder" + i].loadMovie(nodes[i].attributes.thumb); //载入缩略图
       
        //建立遮罩
        container.setMask(mask);
       
        //建立菜单
        var menu = home.createEmptyMovieClip("menu" + i, i+40); //建立相等数量的空影片剪辑以存放菜单文字
        menu._x = menul;
        menu._y = menut + (mlh * i);
        menu.moveTo(menul, menut);
        menu.createTextField("btxt", 0, 0, 0, 150, 20); //建立动态文本存放文字
        menu.btxt.html = true;
        menu.btxt.wordWrap = true;
        menu.btxt.text = (nodes[i].attributes.nav); //载入文字
       
        //菜单文字样式
        btntf = new TextFormat();
        btntf.color = 0x666666;
        btntf.font = "verdana";
        btntf.leading = 10;
        btntf.size = 10;
        menu.btxt.setTextFormat(btntf);
       
        //储存i的值,这一步非常重要
        menu.i = i;
       
        //菜单鼠标滑入,滑出,点击时的代码
        menu.onRollOver = function()
        {
            var who:Number = this.i; //提取当前 i
            maskdy = menut + (mlh * who) - 15; //遮罩位置根据当前 i,即当前菜单按钮来计算
            containdy = maskdy - (tlh * who); //遮罩中缩略图的位置根据在遮罩位置的基础上再根据当前 i 计算出来
            speed = 3; //当鼠标滑入菜单是把速度提高 (speed值越小,速度越高,因为缓动函数中y的位移根speed是相除关系,这里我们的设置将使鼠标滑入菜单按钮时提高遮罩和缩略图的缓动速度,当然随便您啦,您当然也可以相反让他们变得更慢,完全是个人喜好
            menutf = new TextFormat();
            menutf.underline = true; //鼠标滑入时菜单上文字加下划线
            this.btxt.setTextFormat(menutf);
        }
        menu.onRollOut = function()
        {
            var who:Number = this.i; //提取当前 i
            var offy = Stage.height + 50;
            maskdy = offy; //当鼠标滑出菜单时把遮罩和缩略图移出舞台,我们选择移到舞台下方,当然您也可以把它们移到上方看不到的地方,或者自己编写透明度的缓动函数让它们的透明度缓动淡出
            containdy = offy - (tlh * who); //同样缩略图的缓动位置也相对其当前位置相应的移出舞台
            speed = 10; //设置缓动速度,使移出时速度变慢
            menutf = new TextFormat();
            menutf.underline = false;
            this.btxt.setTextFormat(menutf);
        }
        menu.onRelease = function()
        {
            var who:Number = this.i; //提取当前 i
            var link:String = nodes[who].attributes.url; //把XML中url储存到变量link中
            getURL(link, "_blank");
        }
    }
}

myx.load("xmlMenu.xml")

//到这里基本上完成了,下面只需要把用到一些缓动函数加上就可以了;

//遮罩影片剪辑的缓动函数
mask.onEnterFrame = function()
{
    maskoldy = this._y;
    this._y += (maskdy - maskoldy) / 7;
}

//缩略图母影片剪辑的缓动函数
container.onEnterFrame = function()
{
    containoldy = this._y;
    this._y += (containdy - containoldy) / 7;
}

//缩略图外框的缓动函数
br.onEnterFrame = function()
{
    brdy = maskdy;
    broldy = this._y;
    this._y += (brdy - broldy) / 7;
}

//初始化遮罩缩略图位置
maskdy = menut + (mlh * 0) - 15;
containdy = maskdy - (tlh * 0);

// 这个是这里我们用到的XML文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<xmeMenu>
<menu nav="Volkswagen Phaeton" url="http://www.keyframe1.com/kf1/work/phaeton/" thumb="thumb/1.jpg" />
<menu nav="Volkswagen Touareg" url="http://www.keyframe1.com/kf1/work/touareg/" thumb="thumb/2.jpg" />
<menu nav="KeyFrame1 Digital" url="http://www.keyframe1.com" thumb="thumb/3.jpg" />
<menu nav="I-Jar Layout" url="http://www.keyframe1.com" thumb="thumb/4.jpg" />
<menu nav="CGRN e-Learning" url="http://www.cgrn.cn" thumb="thumb/5.jpg" />
<menu nav="Wild Product" url="http://www.keyframe1.com" thumb="thumb/6.jpg" />
<menu nav="Chinese Made Easy" url="http://www.chinesemadeeasy.net" thumb="thumb/7.jpg" />
<menu nav="Jin Shun Jin Da" url="http://www.keyframe1.com/kf1/work/jinshun/" thumb="thumb/8.jpg" />
<menu nav="KeyFrame1 Flash beta" url="http://beta.keyframe1.com" thumb="thumb/9.jpg" />
<menu nav="Volkswagen New Beetle" url="http://www.keyframe1.com/kf1/work/nb/" thumb="thumb/10.jpg" />
<menu nav="Volkswagen Revamp" url="http://www.volkswagen.com.cn" thumb="thumb/11.jpg" />
<menu nav="VW New Beetle Cabriolet" url="http://www.keyframe1.com/kf1/work/nbc/" thumb="thumb/12.jpg" />
<menu nav="KeyFrame1 Flash beta" url="http://beta.keyframe1.com" thumb="thumb/9.jpg" />
<menu nav="Volkswagen New Beetle" url="http://www.keyframe1.com/kf1/work/nb/" thumb="thumb/10.jpg" />
<menu nav="Volkswagen Revamp" url="http://www.volkswagen.com.cn" thumb="thumb/11.jpg" />
<menu nav="VW New Beetle Cabriolet" url="http://www.keyframe1.com/kf1/work/nbc/" thumb="thumb/12.jpg" />
</xmeMenu>

现在可以试着修改,删除或者添加我们的XML,你会发现我们的swf文件自动更新数据了。在未来的XML菜单系列教程中,我们会在这个教程的基础上继续丰富这个XML菜单的功能。

源码下载kf1_xmlMenu.zip

经典论坛讨论
http://bbs.blueidea.com/thread-2707340-1-1.html

出处:蓝色理想
责任编辑:blue

上一页 下一页 XML动态菜单 [1]

◎进入论坛Flash专栏版块参加讨论

相关文章 更多相关链接
Bcastr3.0 flash通用图片播放器
Flash破解与加密
如何生成XML数据
flash9.ocx 加载错误解决方法
《Flash网站建设技术精粹》
关键字搜索 常规搜索 推荐文档
热门搜索:CSS Fireworks 设计比赛 网页制作 web标准 用户体验 UE photoshop Dreamweaver Studio8 Flash 手绘 CG
站点最新 站点最新列表
周大福“敬•自然”设计大赛开启
国际体验设计大会7月将在京举行
中国国防科技信息中心标志征集
云计算如何让安全问题可控
云计算是多数企业唯一拥抱互联网的机会
阿里行云
云手机年终巨献,送礼标配299起
阿里巴巴CTO王坚的"云和互联网观"
1499元买真八核 云OS双蛋大促
首届COCO桌面手机主题设计大赛
栏目最新 栏目最新列表
浅谈JavaScript编程语言的编码规范
如何在illustrator中绘制台历
Ps简单绘制一个可爱的铅笔图标
数据同步算法研究
用ps作简单的作品展示页面
CSS定位机制之一:普通流
25个最佳最闪亮的Eclipse开发项目
Illustrator中制作针线缝制文字效果
Photoshop制作印刷凹凸字体
VS2010中创建自定义SQL Rule
>> 分页 首页 前页 后页 尾页 页次:1/21个记录/页 转到 页 共2个记录

蓝色理想版权申明:除部分特别声明不要转载,或者授权我站独家播发的文章外,大家可以自由转载我站点的原创文章,但原作者和来自我站的链接必须保留(非我站原创的,按照原来自一节,自行链接)。文章版权归我站和作者共有。

转载要求:转载之图片、文件,链接请不要盗链到本站,且不准打上各自站点的水印,亦不能抹去我站点水印。

特别注意:本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有,文章若有侵犯作者版权,请与我们联系,我们将立即删除修改。

您的评论
用户名:  口令:
说明:输入正确的用户名和密码才能参与评论。如果您不是本站会员,你可以注册 为本站会员。
注意:文章中的链接、内容等需要修改的错误,请用报告错误,以利文档及时修改。
不评分 1 2 3 4 5
注意:请不要在评论中含与内容无关的广告链接,违者封ID
请您注意:
·不良评论请用报告管理员,以利管理员及时删除。
·尊重网上道德,遵守中华人民共和国的各项有关法律法规
·承担一切因您的行为而直接或间接导致的民事或刑事法律责任
·本站评论管理人员有权保留或删除其管辖评论中的任意内容
·您在本站发表的作品,本站有权在网站内转载或引用
·参与本评论即表明您已经阅读并接受上述条款
推荐文档 | 打印文档 | 评论文档 | 报告错误  
专业书推荐 更多内容
网站可用性测试及优化指南
《写给大家看的色彩书1》
《跟我去香港》
众妙之门—网站UI 设计之道
《Flex 4.0 RIA开发宝典》
《赢在设计》
犀利开发—jQuery内核详解与实践
作品集 更多内容

杂⑦杂⑧ Gold NORMANA V2