用FLEX能实现这样的效果么?

mdot 2010-01-14 10:43:48
用FLEX能实现这样的效果么?,我现在想实现这个网站里的效果:
http://www.gdltax.gov.cn/portal/jsp/portal/category_frame.jsp?categoryId=1031441&siteName=gdn&styleName=blue&portletStyleName=null
,但发现存在很多问题,一个是过渡的效果问题,还有就是FLEX里能做出FLASH里那些漂亮
的按钮么?还有的就是这个功能的大概设计思路是什么
...全文
379 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
ThornBird313 2010-01-26
  • 打赏
  • 举报
回复

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="{menuClickHandler(null)}">

<mx:Style>
.menuButton
{
fontSize: 12;
fontStyle: normal;
fontWeihgt: normal;
}

.menuItemButton
{
fontSize: 12;
fontStyle: normal;
fontWeihgt: normal;
}
</mx:Style>

<mx:Script>
<![CDATA[
import flash.events.MouseEvent;
import flash.net.navigateToURL;
import flash.net.URLRequest;

import mx.controls.Button;
import mx.events.EffectEvent;

private var menuData:Object = {label: "场景导航", children: [
{label: "税务登录", children: [
{label: "我要进行设立税务登记", children: [
{label: "一般税务登记", url: "http://www.csdn.net"},
{label: "临时税务登记", url: "http://www.baidu.com"},
{label: "扣缴税款登记", url: "http://www.sohu.com"}
]},
{label: "我要进行变更税务登记", url: "http://www.javaeye.com"},
{label: "我要进行停、复业登记"},
{label: "我要进行注销登记"}
]},
{label: "发票管理", children: [
{label: "我要购买FAPIAO"},
{label: "我要代开FAPIAO"},
{label: "我要验旧、缴销FAPIAO"},
{label: "我遗失了FAPIAO"}
]},
{label: "纳税申报", children: [
{label: "我要上门申报"},
{label: "我要网上申报"},
{label: "我十分想申报个税"}
]},
{label: "涉税申请", children: []}
]};

private var currentMenuItemIndex:int = 0;

private function showMenu(data:Object):void
{
var menuButton:Button = new Button();
menuButton.data = data;
menuButton.label = data.label;
menuButton.addEventListener(MouseEvent.CLICK, menuClickHandler);
menuButton.styleName = "menuButton";
menuBar.addChild(menuButton);
showMenuItems(data);
}

private function showMenuItems(data:Object):void
{
var menuItemList:Array = data.children as Array;
var menuItemButtonList:Array = [];
menuItemBox.removeAllChildren();
for (var i:int = 0; i < menuItemList.length; i++)
{
var menuItemButton:Button = new Button();
menuItemButton.data = menuItemList[i];
menuItemButton.label = menuItemList[i].label;
menuItemButton.x = 280;
menuItemButton.y = i * 30;
menuItemButton.width = 180;
menuItemButton.addEventListener(MouseEvent.CLICK, menuItemClickHandler);
menuItemButton.styleName = "menuItemButton";
menuItemBox.addChild(menuItemButton);
menuItemButtonList.push(menuItemButton);
}
fadeEffect.duration = 150 * menuItemButtonList.length;
fadeEffect.play(menuItemButtonList);
currentMenuItemIndex = -1;
effectEndHandler(null);
}

private function menuClickHandler(event:MouseEvent):void
{
var currentMenuButton:Button = null;
if (event)
currentMenuButton = event.target as Button;
if (currentMenuButton)
{
var menuButtonCount:int = menuBar.getChildIndex(currentMenuButton) + 1;
while (menuBar.numChildren > menuButtonCount)
menuBar.removeChildAt(menuBar.numChildren - 1);
showMenuItems(currentMenuButton.data);
}
else
{
showMenu(menuData);
}
}

private function menuItemClickHandler(event:MouseEvent):void
{
var menuItemButton:Button = event.target as Button;
var data:Object = menuItemButton.data;
if (data.hasOwnProperty("children"))
{
showMenu(data);
}
else if (data.hasOwnProperty("url"))
{
var url:String = data.url;
var urlRequest:URLRequest = new URLRequest(url);
navigateToURL(urlRequest);
}

}

private function effectEndHandler(event:EffectEvent):void
{
currentMenuItemIndex = currentMenuItemIndex + 1;
if (currentMenuItemIndex < menuItemBox.numChildren)
moveEffect.play([menuItemBox.getChildAt(currentMenuItemIndex)]);
}
]]>
</mx:Script>

<mx:Fade id="fadeEffect"
alphaFrom="0" alphaTo="1" />
<mx:Move id="moveEffect"
duration="150" xFrom="200" xTo="100"
effectEnd="effectEndHandler(event)" />

<mx:VBox width="100%" height="100%">
<mx:HBox id="menuBar" width="100%" height="27" />
<mx:Canvas id="menuItemBox"
width="280" height="100%" horizontalScrollPolicy="off" />
</mx:VBox>

</mx:Application>
mdot 2010-01-25
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 thornbird313 的回复:]
菜单数据应该不是很多吧,不如直接从服务器把所有数据都返回,这样加载要方便一些。

这是我依照楼主给的那个网站写的一个例子:

XML code<?xml version="1.0" encoding="utf-8"?><mx:Applicationxmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="{menuClickHandler(null)}"><mx:Style>
.menuButton
{
fontSize: 12;
fontStyle: normal;
fontWeihgt: normal;
}

.menuItemButton
{
fontSize: 12;
fontStyle: normal;
fontWeihgt: normal;
}</mx:Style><mx:Script><![CDATA[
import flash.events.MouseEvent;

import mx.controls.Button;
import mx.events.EffectEvent;

private var menuData:Object = {label: "场景导航", children: [
{label: "SHUIFU登录", children: [
{label: "我要进行设立SHUIFU登记", children: [
{label: "一般SHUIFU登记"},
{label: "临时SHUIFU登记"},
{label: "扣缴税款登记"}
]},
{label: "我要进行变更SHUIFU登记"},
{label: "我要进行停、复业登记"},
{label: "我要进行注销登记"}
]},
{label: "FAPIAO管理", children: [
{label: "我要购买FAPIAO"},
{label: "我要代开FAPIAO"},
{label: "我要验旧、缴销FAPIAO"},
{label: "我遗失了FAPIAO"}
]},
{label: "纳税申报", children: [
{label: "我要上门申报"},
{label: "我要网上申报"},
{label: "我十分想申报个税"}
]},
{label: "涉税申请", children: []}
]};

private var currentMenuItemIndex:int = 0;

private function showMenu(data:Object):void
{
var menuButton:Button = new Button();
menuButton.data = data;
menuButton.label = data.label;
menuButton.addEventListener(MouseEvent.CLICK, menuClickHandler);
menuButton.styleName = "menuButton";
menuBar.addChild(menuButton);
showMenuItems(data);
}

private function showMenuItems(data:Object):void
{
var menuItemList:Array = data.children as Array;
var menuItemButtonList:Array = [];
menuItemBox.removeAllChildren();
for (var i:int = 0; i < menuItemList.length; i++)
{
var menuItemButton:Button = new Button();
menuItemButton.data = menuItemList[i];
menuItemButton.label = menuItemList[i].label;
menuItemButton.x = 280;
menuItemButton.y = i * 30;
menuItemButton.width = 180;
menuItemButton.addEventListener(MouseEvent.CLICK, menuItemClickHandler);
menuItemButton.styleName = "menuItemButton";
menuItemBox.addChild(menuItemButton);
menuItemButtonList.push(menuItemButton);
}
fadeEffect.duration = 150 * menuItemButtonList.length;
fadeEffect.play(menuItemButtonList);
currentMenuItemIndex = -1;
effectEndHandler(null);
}

private function menuClickHandler(event:MouseEvent):void
{
var currentMenuButton:Button = null;
if (event)
currentMenuButton = event.target as Button;
if (currentMenuButton)
{
var menuButtonCount:int = menuBar.getChildIndex(currentMenuButton) + 1;
while (menuBar.numChildren > menuButtonCount)
menuBar.removeChildAt(menuBar.numChildren - 1);
showMenuItems(currentMenuButton.data);
}
else
{
showMenu(menuData);
}
}

private function menuItemClickHandler(event:MouseEvent):void
{
var menuItemButton:Button = event.target as Button;
var data:Object = menuItemButton.data;
if (data.hasOwnProperty("children"))
showMenu(data);
}

private function effectEndHandler(event:EffectEvent):void
{
currentMenuItemIndex = currentMenuItemIndex + 1;
if (currentMenuItemIndex < menuItemBox.numChildren)
moveEffect.play([menuItemBox.getChildAt(currentMenuItemIndex)]);
}]]></mx:Script><mx:Fadeid="fadeEffect"
alphaFrom="0" alphaTo="1"/><mx:Moveid="moveEffect"
duration="150" xFrom="200" xTo="100"
effectEnd="effectEndHandler(event)"/><mx:VBoxwidth="100%" height="100%"><mx:HBoxid="menuBar" width="100%" height="27"/><mx:Canvasid="menuItemBox"
width="280" height="100%" horizontalScrollPolicy="off"/></mx:VBox></mx:Application>

[您的回复正文中有非法词或词组!]
见鬼了,待我改一下。
[/Quote]


hi,想问下,如果我想在上面做到的一个效果是,当点到最后一层的菜单时,默认最后一层的菜单是文章了,不再有子目录,比如上面的"一般税务登记"这个按钮,点这个按钮,会打开一个连接,那如何要在上面修改呢,谢谢,
ThornBird313 2010-01-15
  • 打赏
  • 举报
回复
菜单数据应该不是很多吧,不如直接从服务器把所有数据都返回,这样加载要方便一些。

这是我依照楼主给的那个网站写的一个例子:


<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute"
creationComplete="{menuClickHandler(null)}">

<mx:Style>
.menuButton
{
fontSize: 12;
fontStyle: normal;
fontWeihgt: normal;
}

.menuItemButton
{
fontSize: 12;
fontStyle: normal;
fontWeihgt: normal;
}
</mx:Style>

<mx:Script>
<![CDATA[
import flash.events.MouseEvent;

import mx.controls.Button;
import mx.events.EffectEvent;

private var menuData:Object = {label: "场景导航", children: [
{label: "SHUIFU登录", children: [
{label: "我要进行设立SHUIFU登记", children: [
{label: "一般SHUIFU登记"},
{label: "临时SHUIFU登记"},
{label: "扣缴税款登记"}
]},
{label: "我要进行变更SHUIFU登记"},
{label: "我要进行停、复业登记"},
{label: "我要进行注销登记"}
]},
{label: "FAPIAO管理", children: [
{label: "我要购买FAPIAO"},
{label: "我要代开FAPIAO"},
{label: "我要验旧、缴销FAPIAO"},
{label: "我遗失了FAPIAO"}
]},
{label: "纳税申报", children: [
{label: "我要上门申报"},
{label: "我要网上申报"},
{label: "我十分想申报个税"}
]},
{label: "涉税申请", children: []}
]};

private var currentMenuItemIndex:int = 0;

private function showMenu(data:Object):void
{
var menuButton:Button = new Button();
menuButton.data = data;
menuButton.label = data.label;
menuButton.addEventListener(MouseEvent.CLICK, menuClickHandler);
menuButton.styleName = "menuButton";
menuBar.addChild(menuButton);
showMenuItems(data);
}

private function showMenuItems(data:Object):void
{
var menuItemList:Array = data.children as Array;
var menuItemButtonList:Array = [];
menuItemBox.removeAllChildren();
for (var i:int = 0; i < menuItemList.length; i++)
{
var menuItemButton:Button = new Button();
menuItemButton.data = menuItemList[i];
menuItemButton.label = menuItemList[i].label;
menuItemButton.x = 280;
menuItemButton.y = i * 30;
menuItemButton.width = 180;
menuItemButton.addEventListener(MouseEvent.CLICK, menuItemClickHandler);
menuItemButton.styleName = "menuItemButton";
menuItemBox.addChild(menuItemButton);
menuItemButtonList.push(menuItemButton);
}
fadeEffect.duration = 150 * menuItemButtonList.length;
fadeEffect.play(menuItemButtonList);
currentMenuItemIndex = -1;
effectEndHandler(null);
}

private function menuClickHandler(event:MouseEvent):void
{
var currentMenuButton:Button = null;
if (event)
currentMenuButton = event.target as Button;
if (currentMenuButton)
{
var menuButtonCount:int = menuBar.getChildIndex(currentMenuButton) + 1;
while (menuBar.numChildren > menuButtonCount)
menuBar.removeChildAt(menuBar.numChildren - 1);
showMenuItems(currentMenuButton.data);
}
else
{
showMenu(menuData);
}
}

private function menuItemClickHandler(event:MouseEvent):void
{
var menuItemButton:Button = event.target as Button;
var data:Object = menuItemButton.data;
if (data.hasOwnProperty("children"))
showMenu(data);
}

private function effectEndHandler(event:EffectEvent):void
{
currentMenuItemIndex = currentMenuItemIndex + 1;
if (currentMenuItemIndex < menuItemBox.numChildren)
moveEffect.play([menuItemBox.getChildAt(currentMenuItemIndex)]);
}
]]>
</mx:Script>

<mx:Fade id="fadeEffect"
alphaFrom="0" alphaTo="1" />
<mx:Move id="moveEffect"
duration="150" xFrom="200" xTo="100"
effectEnd="effectEndHandler(event)" />

<mx:VBox width="100%" height="100%">
<mx:HBox id="menuBar" width="100%" height="27" />
<mx:Canvas id="menuItemBox"
width="280" height="100%" horizontalScrollPolicy="off" />
</mx:VBox>

</mx:Application>


[您的回复正文中有非法词或词组!]
见鬼了,待我改一下。
mdot 2010-01-15
  • 打赏
  • 举报
回复
但是现在我的应用情况是:在首页加载时,先读出第一层目录的内容,比如有4个记录,分别把记录的内容设置到按钮中,这个上面的代码已经可以实现了.我现在的需求是:当点这4个按钮中的任意一个时,读出该记录的ID,然后再到服务端去返回该目录的下一级子目录,因此也就是要动态设置remoteobject的参数了,即上面的 <mx:arguments>
,于是我用下面的方法,尝试在AS代码中去动态设置REMOTEOBJECT的各个属性,但发现连基本的第一层目录都显示不到,并且发现FLEX并没有跟后端交互,想请教如何搞?
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplete="firstload()" width="706" height="417">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.controls.Alert;
import mx.rpc.events.FaultEvent;
import mx.rpc.remoting.RemoteObject;
import mx.rpc.events.ResultEvent;
import mx.rpc.events.FaultEvent;
import mx.rpc.remoting.mxml.Operation;
[Bindable]
public var categoryremote:RemoteObject;
[Bindable]
private var posArray:ArrayCollection = new ArrayCollection();

private function firstload():void
{


categoryremote=new RemoteObject();

categoryremote.destination="categoryservice";


var o:Operation = categoryremote.getOperation("getCategoriesByPidflex") as Operation;
o.addEventListener(ResultEvent.RESULT, resultEvent);
o.arguments=144;
o.send();


// srv.getCategoriesByPidflex();


}

//remoteobject返回的list
private function resultEvent(event:ResultEvent):void{

posArray = event.result as ArrayCollection;
r.dataProvider=posArray;

}
private function findAllFaultHandler(event:FaultEvent):void
{
Alert.show(event.fault.faultString, "Error");
}

private function clickHandler(event:Event):void {
trace(event.currentTarget.getRepeaterItem().@id);
}

]]>
</mx:Script>


<mx:VBox id="h" horizontalAlign="right" verticalAlign="bottom" horizontalCenter="-76">

<mx:Repeater id="r">
<mx:Label text="{Category(r.currentItem).id}"/>
<mx:Button id="repbutton" label="{Category(r.currentItem).name}" click="var btn:Button = Button(event.currentTarget); Alert.show(Category(btn.getRepeaterItem()).id+ ' pressed')" width="555" height="83" textAlign="center" fontSize="27"/>
</mx:Repeater>


</mx:VBox>

</mx:Application>

nick848 2010-01-15
  • 打赏
  • 举报
回复
当然可以 flex还能做得更好
xingjunli 2010-01-15
  • 打赏
  • 举报
回复
flash能做的FLEX就能做,

flash设计界面,用FLEX写逻辑才是正道
水中影子 2010-01-15
  • 打赏
  • 举报
回复
可以的,flex有自带的特效,至于按钮也可以,可以写样式
mdot 2010-01-15
  • 打赏
  • 举报
回复
给分了
水中影子 2010-01-15
  • 打赏
  • 举报
回复
楼上的,牛!!!

4,328

社区成员

发帖
与我相关
我的任务
社区描述
多媒体/设计 Flex
社区管理员
  • Flex
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧