xml导航

前几天看见一位朋友制作了一个xml的link,真的很不错,但是由于是text的,很多地方都无法利用,所以我就做了一个和mc结合的,因为xml可以和任何语言结合,所以在做大型网站的时候非常有用,大家可以先看一下效果: ::URL::http://220.198.78.234
开始动手做了:
1创建一个xml文件,取名叫nav.xml
<?xml version="1.0" encoding="gb2312"?>
<navLinks>
//这里是分类的id,这个教程取了两个分类(movie和play),你其实可以做很多分类
<links id="movie">
<link>
<name>爱情</name>
<address>::URL::http://design.byemedia.com<;/address>
</link>
<link>
<name>动作</name>
<address>::URL::http://www.byemedia.com<;/address>
</link>
<link>
<name>连续剧</name>
<address>::URL::http://bsb.byemedia.com<;/address>
</link>
</links> <links id="play">
<link>
<name>link3</name>
<address>::URL::http://www.flash8.net<;/address>
</link> <link>
<name>link4</name>
<address>::URL::http://www.flash8.net<;/address>
</link>
</links>
</navLinks>
2 创建一个fla,取名叫nav.fla 先做一个mc,取名叫button1_,然后在linkage选项的export for action script打对构,给这个mc取名叫buttonA。 再做一个叫button1的button(不是mc),按照你的喜好设置on,over,release,和down
3 在这个mc里面有三个层 第一层是as,就是写代码用的
第二层是text,就是放置button上面的文字
第三层是button,就是那个button1的button
4 创建简单运动给这个button1,例如加速入场
5 回到场景scene,这个时候你的场景scene应该是空白的。 建立两个层,一个是as,一个是button层,并在其上面随意创建两个button,这个是为了调用两个分类的
6 在as层第一帧加入
stop();
var myLinks = new XML();//创建XML对象
myLinks.load("nav.xml";//加载外部的XML文件
myLinks.ignoreWhite = true;//忽略空格
myLinks.onLoad = parseXML;//测试XML的格式
var unLoadArray = new Array();//预卸载的MC的Array function parseXML (success){
if (success) {
// Check for a malformed XML document
if (this.status != 0) {
trace("The XML document was invalid. Error: "+this.status);
return;
}
if(this.firstChild.nodeName.toLowerCase() != "navlinks"{
trace("Sorry, Unexpect beginning node name " + nav_array);
return;
}
parseXMLContent = true;
//navText = parseXMLContent;
//return parseXMLContent;
}
}
function parseLinks(sectionNum) {
if(parseXMLContent == true){
nav_array = myLinks.firstChild.childNodes;
//trace(nav_array.length);
//for(l = 0;l < nav_array.length; l++){
var links_id=nav_array[sectionNum].attributes.id;
//output section id
trace("current section is " + links_id);
//extract child nodes to array
var links_array = nav_array[sectionNum].childNodes;
//parse link node
for(i=0;i<links_array.length;i++){
//fetch nodeName
var link_array = links_array[i].childNodes;
var buttonID = i;
//子button的ID
var buttonNum = links_array.length;
//子button的数量
parseNameNode(link_array,links_id,buttonID,buttonNum,sectionNum);
}
}
} function parseNameNode (name_array,links_id,buttonID,buttonNum,sectionNum){
for(n=0;n<name_array.length;n++){
//trace(name_array);
var address_node = name_array[n].nodeName;
//fetch node names
if(address_node == "name"{
var address_name = name_array[n].firstChild.nodeValue;
}else{
var address_value = name_array[n].firstChild.nodeValue;
//已经提取了name和value变量后开始加载button mc
_root.attachMovie("buttonA", links_id + "_button" + buttonID, 11+buttonID);
//加载一个子button
_root[links_id + "_button" + buttonID]._x = _root[links_id + "_button" + buttonID]._width*buttonID + _root["nav"+sectionNum]._x - buttonNum*10;
//放置button的x位置 这一个子button的所在的位置 + 本身所在的上层button的位置 - 子button数量×10(使位置比较居中)
_root[links_id + "_button" + buttonID]._y = 80;
_root[links_id + "_button" + buttonID].buttonText = address_name;
//加载子button的名称
_root[links_id + "_button" + buttonID].buttonURL = address_value;
//加载子button的地址
_root.unLoadArray[buttonID] = links_id + "_button" + buttonID;
//把这个子button加入预卸载的array里面
}
//trace("";
//trace(address_name + " " + address_value);
//trace("";
}
}
function removeUnloadMC(unloadArray){
for(u = 0; u < unLoadArray.length; u ++){
var unloadMC = unLoadArray[u]
removeMovieClip(unloadMC);//里面不能放置array的成员
navText += unloadMC + " Have removed ";//帮助信息
}
}
7 在场景scene里面的那两个button上面加as 第一个
on(rollOver){
removeUnloadMC(unloadArray);
parseLinks(0);
}
on(rollOut){
navText ="";
}
第二个
on(rollOver){
removeUnloadMC(unloadArray);
parseLinks(1);
}
on(rollOut){
navText ="";
}
8 发布nav.swf并且和nav.xml放在同一个目录
9 测试一下吧
posted @ 2006-07-05 23:24  随风而逝  阅读(428)  评论(0编辑  收藏  举报