- 浏览: 290450 次
- 性别:
- 来自: 深圳
-
文章分类
最新评论
-
xisuchi:
咋没人收藏阿
前端开发大众手册(包括工具、网址、经验等) -
past2010yeah:
太好了,解决了我纠结很久的问题!!!非常感谢!
解决Flex跨域"访问URL时遇到安全性错误" -
shlei:
xiao_kai 写道这样会不会牺牲性能啊~~会,但是这是暂时 ...
解决flex4 spark 找不到外观错误 -
xiao_kai:
这样会不会牺牲性能啊~~
解决flex4 spark 找不到外观错误 -
jcl860:
兄台:左边面板是图片,还是用mxml画出来的图形?
仿IBM-BPM Editor实现的WorkFlowEditor
Flex组件内置了处理拖拽事件的接口,有些控件已经实现了拖拽功能,比如List、DataGrid、Menu、
HorizontalList、 PrintDataGrid、TileList、Tree,在设置相关的拖拽属性后,它们都可以在相同类型的组
件之间利用鼠标来实现数据的转移。
allowDragSelection 是否可以拖选
allowMultipleSelection 是否可以多选
dragEnabled 是否可以拖动子元素
dragMoveEnabled 是否移动元素位置,而不是复制元素
dropEnabled 是否可以将物体放置进来
在Flex中,有几个专门的对象供开发者处理拖拽事件:
DragManager:位于mx.managers包中,管理拖拽事件
DragSource: 位于mx.core包中,是Flex框架中的核心成员,处理拖拽中的数据传递
DragEvent: 位于mx.events包中,拖拽操作中的事件对象。
按照逻辑,拖拽中至少有两个对象:一方提供数据,一方接收数据。在这个过程中,提供数据的一方按照前后 顺序,可以把整个过程划分为下面几个事件:
mouseDown:鼠标按下。
mouseMove:鼠标移动。
dragComplate:鼠标释放。判断目标是否接受数据,如果可以,拖放成功。
接收方也将经历几个阶段
dragEnter:被拖动对象移动到目标范围中。
dragDrop:鼠标在目标上松开。
dragOver:鼠标移动到目标上。
dragExit:独享被拖离目标范围。
1. Tree与Tree之间的拖动:
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle">
<mx:XML id="myData">
<data>
<item label="ActionScript">
<item label="Flash"/>
<item label="Flex"/>
</item>
<item label="Mirage">
</item>
<item label="JavaScript"/>
</data>
</mx:XML>
<mx:XML id="copyData">
<data>
<item label="JavaScript"/>
</data>
</mx:XML>
<mx:Tree dropEnabled="true"
dragEnabled="true"
dragMoveEnabled="true"
allowMultipleSelection="true"
dataProvider="{myData.item}"
labelField="@label"/>
<mx:Tree dropEnabled="true"
dataProvider="{copyData.item}"
labelField="@label"/>
</mx:Application>
上面代码中只需设置
dropEnabled="true" //是否可以将被拖动的物体放置进来
dragEnabled="true" //是否可以拖动子元素
dragMoveEnabled="true" //是否只是移动元素,而不是复制元素
allowMultipleSelection="true" //是否可以多项拖动元素,为true时可以用ctrl选多个一起拖动
List与List之间的拖动,只要设置上面的就可以了。
DataGrid 拖动到DataGrid和List
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
fontSize="12">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.DragEvent;
[Bindable]
private var mylist:ArrayCollection;
//当拖完成时
private function onDrop(e:DragEvent):void
{
var myData:Object=new Object();
myData=e.dragSource.dataForFormat('items'); //从dragSource中拿到条目
var name:String=myData[0].name; //注意这个地方必需要用变量进行替换
list1.dataProvider.addItem(name);
e.preventDefault(); //可以去掉默认的数据转移
}
]]>
</mx:Script>
<mx:XMLList id="employees">
<employee>
<name>刘海</name>
<phone>13042334532</phone>
<email>liuhai@163.com</email>
</employee>
<employee>
<name>张春</name>
<phone>13642987532</phone>
<email>zhang@sina.com</email>
</employee>
<employee>
<name>小李</name>
<phone>13923485844</phone>
<email>xiaoli@qq.com</email>
</employee>
</mx:XMLList>
<mx:DataGrid x="10"
y="15"
width="277"
id="dg"
rowCount="5"
dataProvider="{employees}"
dragEnabled="true">
<mx:columns>
<mx:DataGridColumn headerText="Name"
dataField="name"/>
<mx:DataGridColumn headerText="Email"
dataField="email"/>
<mx:DataGridColumn headerText="Phone"
dataField="phone"/>
</mx:columns>
</mx:DataGrid>
<mx:DataGrid dropEnabled="true">
<mx:columns>
<mx:DataGridColumn headerText="Name"
dataField="name"/>
<mx:DataGridColumn headerText="Email"
dataField="email"/>
<mx:DataGridColumn headerText="Phone"
dataField="phone"/>
</mx:columns>
</mx:DataGrid>
<mx:List height="210"
width="206"
id="list1"
dropEnabled="true"
dataProvider="{mylist}"
dragDrop="onDrop(event)">
</mx:List>
<!--文档注释-->
<mx:TextInput width="500"
height="146"
horizontalCenter="0"
verticalCenter="-204"
fontWeight="normal"
textAlign="center">
<mx:htmlText>
<![CDATA[
Date: 2009.05.05
Email:woai_php@sina.com
QQ:1019822077
Blog:
<font color="#FF0000">
<a href="http://hi.baidu.com/woaidelphi/blog/category/Flex">
http://hi.baidu.com/woaidelphi/blog/category/Flex
</a>
</font>
华夏之星希望和你成为朋友。一起学习,共同奋斗!!!。。。
]]>
</mx:htmlText>
</mx:TextInput>
</mx:Application>
2.非加强拖动技术
Label的拖动,可以扩展到其他组件
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontSize="12">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.core.IUIComponent;
import mx.events.DragEvent;
import mx.core.DragSource;
import mx.managers.DragManager;
[Bindable]
private var listData:ArrayCollection = new ArrayCollection();
//拖动初始器
private function dragSource(myData:String,e:MouseEvent,format:String):void
{
var iu:IUIComponent = e.currentTarget as IUIComponent;
var ds : DragSource = new DragSource();
ds.addData(myData,format);//设置一个标号format
DragManager.doDrag(iu,ds,e); // 开始拖动这个物体
}
//当拖进去时
private function onEnter( e:DragEvent,format:String ) : void
{
if(e.dragSource.hasFormat(format))//如果标号为format则接受拖来的物体
{
DragManager.acceptDragDrop(IUIComponent(e.target) );// 接受被拖进来的物体
}
}
//当拖完成时
private function onDrop(e:DragEvent,format:String) : void
{
var myData:Object = new Object();
myData = e.dragSource.dataForFormat(format);
list1.dataProvider.addItem(myData);//list1是List的id,要是扩展到其他组件,改这里就可以了。
}
]]>
</mx:Script>
<mx:Label text="拖动我到List" width="86" height="27" id="lbl" mouseDown="dragSource('这个是一个label',event,'stringFormat')"/>
<mx:List dataProvider="{listData}" id="list1" dragEnter="onEnter(event,'stringFormat')"
dragDrop="onDrop(event,'stringFormat')" width="206">
</mx:List>
<!--文档注释-->
<mx:TextInput width="500" height="146" horizontalCenter="0" verticalCenter="-204"
fontWeight="normal" textAlign="center">
<mx:htmlText>
<![CDATA[
Date: 2009.05.05
Email:woai_php@sina.com
QQ:1019822077
Blog:<font color="#FF0000">
<a href="http://hi.baidu.com/woaidelphi/blog/category/Flex">
http://hi.baidu.com/woaidelphi/blog/category/Flex
</a>
</font>
华夏之星希望和你成为朋友。一起学习,共同奋斗!!!。。。
]]>
</mx:htmlText>
</mx:TextInput>
</mx:Application>
Button的拖动,可以扩展到其他组件
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
fontSize="12">
<mx:Script>
<![CDATA[
import mx.core.IUIComponent;
import mx.events.DragEvent;
import mx.core.DragSource;
import mx.managers.DragManager;
//拖动初始器
private function dragSource(e:MouseEvent, format:String):void
{
var iu:IUIComponent=e.currentTarget as IUIComponent;
var ds:DragSource=new DragSource();
ds.addData({"x": e.localX, "y": e.localY}, format); //设置一个标号format
DragManager.doDrag(iu, ds, e);
}
//当拖进去时
private function onEnter(e:DragEvent, format:String):void
{
if (e.dragSource.hasFormat(format)) //如果标号为format则接受拖来的物体
{
DragManager.acceptDragDrop(IUIComponent(e.target));
}
}
//当拖完成时
private function onDrop(e:DragEvent, format:String):void
{
var myData:Object=new Object();
myData=e.dragSource.dataForFormat(format);
btn.x=this.mouseX - myData.x; //btn为按钮的id,要是扩展到其他组件,改这里就可以了。
btn.y=this.mouseY - myData.y;
}
]]>
</mx:Script>
<mx:Canvas y="40"
id="cansAccess"
backgroundColor="#000000"
width="300"
height="200"
dragEnter="onEnter(event,'formatString')"
dragDrop="onDrop(event,'formatString')"/>
<mx:Button id="btn"
label="拖动我到面板"
mouseDown="dragSource(event,'formatString')"/>
<!--文档注释-->
<mx:TextInput width="500"
height="146"
horizontalCenter="0"
verticalCenter="-204"
fontWeight="normal"
textAlign="center">
<mx:htmlText>
<![CDATA[
Date: 2009.05.05
Email:woai_php@sina.com
QQ:1019822077
Blog:<font color="#FF0000">
<a href="http://hi.baidu.com/woaidelphi/blog/category/Flex">
http://hi.baidu.com/woaidelphi/blog/category/Flex
</a></font>
华夏之星希望和你成为朋友。一起学习,共同奋斗!!!。。。
]]>
</mx:htmlText>
</mx:TextInput>
</mx:Application>
一定要注意,标签的先后位置,Button 要在Canvas 之后.
3.Canvas容器中拖动Box,你还可以在Box中添加图片等。
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
fontSize="12">
<mx:Script>
<![CDATA[
import mx.containers.Box;
import mx.containers.Canvas;
import mx.core.IUIComponent;
import mx.events.DragEvent;
import mx.managers.DragManager;
import mx.core.DragSource;
//拖动初始器
private function dragSource(e:MouseEvent, format:String):void
{
var iu:IUIComponent=e.currentTarget as IUIComponent;
var ds:DragSource=new DragSource();
ds.addData(iu, format); //设置一个标号format
DragManager.doDrag(iu, ds, e); // 开始拖动这个物体
}
//当拖进去时
private function onEnter(e:DragEvent, format:String):void
{
if (e.dragSource.hasFormat(format)) //如果标号为format则接受拖来的物体
{
DragManager.acceptDragDrop(IUIComponent(e.target)); // 接受被拖进来的物体
}
}
//当拖完成时
private function onDrop(e:DragEvent, format:String):void
{
var box:Box=Box(e.dragInitiator); //如果扩展到其他组件,改这里Box就可以了。
box.x=e.localX;
box.y=e.localY;
}
]]>
</mx:Script>
<mx:Canvas backgroundColor="0xEEEEEE"
width="500"
height="246"
horizontalCenter="0"
verticalCenter="0"
dragEnter="onEnter(event,'boxFormat')"
dragDrop="onDrop(event,'boxFormat')">
<mx:Box id="boxDrag"
width="20"
height="20"
backgroundColor="0x00FFCC"
x="97"
y="47"
mouseDown="dragSource(event,'boxFormat');">
</mx:Box>
</mx:Canvas>
<!--文档注释-->
<mx:TextInput width="500"
height="146"
horizontalCenter="0"
verticalCenter="-204"
fontWeight="normal"
textAlign="center">
<mx:htmlText>
<![CDATA[
Date: 2009.05.05
Email:woai_php@sina.com
QQ:1019822077
Blog:<font color="#FF0000">
<a href="http://hi.baidu.com/woaidelphi/blog/category/Flex">
http://hi.baidu.com/woaidelphi/blog/category/Flex
</a></font>
华夏之星希望和你成为朋友。一起学习,共同奋斗!!!。。。
]]>
</mx:htmlText>
</mx:TextInput>
</mx:Application>
4.图片的拖动
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
width="100%"
height="100%"
fontSize="12">
<mx:Script>
<![CDATA[
private var oldX:Number; //拖动开始是的坐标
private var oldY:Number;
//拖动开始
private function dragStart(event:MouseEvent):void
{
oldX=event.stageX; //相对Application的坐标
oldY=event.stageY;
}
//拖动结束
private function dragEnd(event:MouseEvent):void
{
lbl.text="Local (x,y):" + event.localX.toString() + "," + event.localX.toString(); //相对图片的坐标
lbl2.text="Stage (x,y):" + event.stageX.toString() + "," + event.stageY.toString(); //相对Application的坐标
if (event.buttonDown)
{ //如果鼠标在移动过程中并且按下,也就是说鼠标的拖动事件。
var x:Number=event.stageX - oldX; //相对Application的坐标的移动量
var y:Number=event.stageY - oldY;
oldX=event.stageX; //更新拖动开始是的坐标
oldY=event.stageY;
img.move(img.x + x, img.y + y); //img是 Image的id,如果扩展到其他组件,改这里就可以了。
}
}
]]>
</mx:Script>
<mx:Label x="10"
y="10"
text=""
id="lbl"/>
<mx:Label x="10"
y="27"
text=""
id="lbl2"/>
<mx:Panel x="257"
y="71"
width="700"
height="80%"
layout="absolute"
horizontalScrollPolicy="off"
verticalScrollPolicy="off"
title="图片在面板中的拖动例子"
fontSize="12">
<mx:Image id="img"
x="0"
y="0"
source="test.JPG"
mouseMove="dragEnd(event)"
mouseDown="dragStart(event)"/>
</mx:Panel>
<!--文档注释-->
<mx:TextInput width="500"
height="146"
fontWeight="normal"
textAlign="center">
<mx:htmlText>
<![CDATA[
Date: 2009.05.05
Email:woai_php@sina.com
QQ:1019822077
Blog:<font color="#FF0000">
<ahref="http://hi.baidu.com/woaidelphi/blog/category/Flex">
http://hi.baidu.com/woaidelphi/blog/category/Flex
</a></font>
华夏之星希望和你成为朋友。一起学习,共同奋斗!!!。。。
]]>
</mx:htmlText>
</mx:TextInput>
</mx:Application>
5.从外部拖动到组件,比如从桌面上拖动一个图片到图片组件等。
因为我的flash包中没有flash.events.NativeDragEvent等。所以这里先不总结了。
6.引入dNdLib.swc库让拖动变得更简单
Flex开放了它的拖拽库(即:flex-drag-n-drop-lib),我们可以利用它做一些很有用的拖拽应用,下面我们
来做一个简单的示例,按照下述的步骤,你会了解到在Flex中使用flex-drag-n-drop-lib的技巧。
1.点击这里下载SWC组件到你的桌面。
2.打开FlexBuilder,新建一个Flex Project,在第三步的Library Path选项中,点击Add SWC按钮,将刚才下
载到的SWC组件引入到项目中。
3.点击Finish,在自动创建的MXML文件中,敲入以下代码:
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
xmlns:containers="dNdLib.containers.*"
fontSize="12">
<mx:Script>
<![CDATA[
import dNdLib.managers.DnDManager;
]]>
</mx:Script>
<containers:DnDContainer borderStyle="solid"
id="left"
backgroundColor="#FFFFFF"
width="161"
height="237"
x="110"
y="168">
<mx:Button label="拖动我"
mouseDown="DnDManager.getInstance().doDrag(event)"
width="92"
height="32"/>
<mx:CheckBox label="拖动就这么简单"
mouseDown="DnDManager.getInstance().doDrag(event)"/>
</containers:DnDContainer>
<containers:DnDContainer borderStyle="solid"
id="bottom"
backgroundColor="#FFFFFF"
x="415"
y="168"
width="140"
height="237"/>
</mx:Application>
然后Run一下看看结果吧,组件可以拖动了。很简单吧。
注意:必须为DnDContainer设置一个背景色(backgroundColor=color),否则可能无法产生相应区域。
转自http://vipoyb.iteye.com/blog/437684
HorizontalList、 PrintDataGrid、TileList、Tree,在设置相关的拖拽属性后,它们都可以在相同类型的组
件之间利用鼠标来实现数据的转移。
allowDragSelection 是否可以拖选
allowMultipleSelection 是否可以多选
dragEnabled 是否可以拖动子元素
dragMoveEnabled 是否移动元素位置,而不是复制元素
dropEnabled 是否可以将物体放置进来
在Flex中,有几个专门的对象供开发者处理拖拽事件:
DragManager:位于mx.managers包中,管理拖拽事件
DragSource: 位于mx.core包中,是Flex框架中的核心成员,处理拖拽中的数据传递
DragEvent: 位于mx.events包中,拖拽操作中的事件对象。
按照逻辑,拖拽中至少有两个对象:一方提供数据,一方接收数据。在这个过程中,提供数据的一方按照前后 顺序,可以把整个过程划分为下面几个事件:
mouseDown:鼠标按下。
mouseMove:鼠标移动。
dragComplate:鼠标释放。判断目标是否接受数据,如果可以,拖放成功。
接收方也将经历几个阶段
dragEnter:被拖动对象移动到目标范围中。
dragDrop:鼠标在目标上松开。
dragOver:鼠标移动到目标上。
dragExit:独享被拖离目标范围。
1. Tree与Tree之间的拖动:
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle">
<mx:XML id="myData">
<data>
<item label="ActionScript">
<item label="Flash"/>
<item label="Flex"/>
</item>
<item label="Mirage">
</item>
<item label="JavaScript"/>
</data>
</mx:XML>
<mx:XML id="copyData">
<data>
<item label="JavaScript"/>
</data>
</mx:XML>
<mx:Tree dropEnabled="true"
dragEnabled="true"
dragMoveEnabled="true"
allowMultipleSelection="true"
dataProvider="{myData.item}"
labelField="@label"/>
<mx:Tree dropEnabled="true"
dataProvider="{copyData.item}"
labelField="@label"/>
</mx:Application>
上面代码中只需设置
dropEnabled="true" //是否可以将被拖动的物体放置进来
dragEnabled="true" //是否可以拖动子元素
dragMoveEnabled="true" //是否只是移动元素,而不是复制元素
allowMultipleSelection="true" //是否可以多项拖动元素,为true时可以用ctrl选多个一起拖动
List与List之间的拖动,只要设置上面的就可以了。
DataGrid 拖动到DataGrid和List
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
fontSize="12">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.events.DragEvent;
[Bindable]
private var mylist:ArrayCollection;
//当拖完成时
private function onDrop(e:DragEvent):void
{
var myData:Object=new Object();
myData=e.dragSource.dataForFormat('items'); //从dragSource中拿到条目
var name:String=myData[0].name; //注意这个地方必需要用变量进行替换
list1.dataProvider.addItem(name);
e.preventDefault(); //可以去掉默认的数据转移
}
]]>
</mx:Script>
<mx:XMLList id="employees">
<employee>
<name>刘海</name>
<phone>13042334532</phone>
<email>liuhai@163.com</email>
</employee>
<employee>
<name>张春</name>
<phone>13642987532</phone>
<email>zhang@sina.com</email>
</employee>
<employee>
<name>小李</name>
<phone>13923485844</phone>
<email>xiaoli@qq.com</email>
</employee>
</mx:XMLList>
<mx:DataGrid x="10"
y="15"
width="277"
id="dg"
rowCount="5"
dataProvider="{employees}"
dragEnabled="true">
<mx:columns>
<mx:DataGridColumn headerText="Name"
dataField="name"/>
<mx:DataGridColumn headerText="Email"
dataField="email"/>
<mx:DataGridColumn headerText="Phone"
dataField="phone"/>
</mx:columns>
</mx:DataGrid>
<mx:DataGrid dropEnabled="true">
<mx:columns>
<mx:DataGridColumn headerText="Name"
dataField="name"/>
<mx:DataGridColumn headerText="Email"
dataField="email"/>
<mx:DataGridColumn headerText="Phone"
dataField="phone"/>
</mx:columns>
</mx:DataGrid>
<mx:List height="210"
width="206"
id="list1"
dropEnabled="true"
dataProvider="{mylist}"
dragDrop="onDrop(event)">
</mx:List>
<!--文档注释-->
<mx:TextInput width="500"
height="146"
horizontalCenter="0"
verticalCenter="-204"
fontWeight="normal"
textAlign="center">
<mx:htmlText>
<![CDATA[
Date: 2009.05.05
Email:woai_php@sina.com
QQ:1019822077
Blog:
<font color="#FF0000">
<a href="http://hi.baidu.com/woaidelphi/blog/category/Flex">
http://hi.baidu.com/woaidelphi/blog/category/Flex
</a>
</font>
华夏之星希望和你成为朋友。一起学习,共同奋斗!!!。。。
]]>
</mx:htmlText>
</mx:TextInput>
</mx:Application>
2.非加强拖动技术
Label的拖动,可以扩展到其他组件
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="vertical" fontSize="12">
<mx:Script>
<![CDATA[
import mx.collections.ArrayCollection;
import mx.core.IUIComponent;
import mx.events.DragEvent;
import mx.core.DragSource;
import mx.managers.DragManager;
[Bindable]
private var listData:ArrayCollection = new ArrayCollection();
//拖动初始器
private function dragSource(myData:String,e:MouseEvent,format:String):void
{
var iu:IUIComponent = e.currentTarget as IUIComponent;
var ds : DragSource = new DragSource();
ds.addData(myData,format);//设置一个标号format
DragManager.doDrag(iu,ds,e); // 开始拖动这个物体
}
//当拖进去时
private function onEnter( e:DragEvent,format:String ) : void
{
if(e.dragSource.hasFormat(format))//如果标号为format则接受拖来的物体
{
DragManager.acceptDragDrop(IUIComponent(e.target) );// 接受被拖进来的物体
}
}
//当拖完成时
private function onDrop(e:DragEvent,format:String) : void
{
var myData:Object = new Object();
myData = e.dragSource.dataForFormat(format);
list1.dataProvider.addItem(myData);//list1是List的id,要是扩展到其他组件,改这里就可以了。
}
]]>
</mx:Script>
<mx:Label text="拖动我到List" width="86" height="27" id="lbl" mouseDown="dragSource('这个是一个label',event,'stringFormat')"/>
<mx:List dataProvider="{listData}" id="list1" dragEnter="onEnter(event,'stringFormat')"
dragDrop="onDrop(event,'stringFormat')" width="206">
</mx:List>
<!--文档注释-->
<mx:TextInput width="500" height="146" horizontalCenter="0" verticalCenter="-204"
fontWeight="normal" textAlign="center">
<mx:htmlText>
<![CDATA[
Date: 2009.05.05
Email:woai_php@sina.com
QQ:1019822077
Blog:<font color="#FF0000">
<a href="http://hi.baidu.com/woaidelphi/blog/category/Flex">
http://hi.baidu.com/woaidelphi/blog/category/Flex
</a>
</font>
华夏之星希望和你成为朋友。一起学习,共同奋斗!!!。。。
]]>
</mx:htmlText>
</mx:TextInput>
</mx:Application>
Button的拖动,可以扩展到其他组件
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
verticalAlign="middle"
fontSize="12">
<mx:Script>
<![CDATA[
import mx.core.IUIComponent;
import mx.events.DragEvent;
import mx.core.DragSource;
import mx.managers.DragManager;
//拖动初始器
private function dragSource(e:MouseEvent, format:String):void
{
var iu:IUIComponent=e.currentTarget as IUIComponent;
var ds:DragSource=new DragSource();
ds.addData({"x": e.localX, "y": e.localY}, format); //设置一个标号format
DragManager.doDrag(iu, ds, e);
}
//当拖进去时
private function onEnter(e:DragEvent, format:String):void
{
if (e.dragSource.hasFormat(format)) //如果标号为format则接受拖来的物体
{
DragManager.acceptDragDrop(IUIComponent(e.target));
}
}
//当拖完成时
private function onDrop(e:DragEvent, format:String):void
{
var myData:Object=new Object();
myData=e.dragSource.dataForFormat(format);
btn.x=this.mouseX - myData.x; //btn为按钮的id,要是扩展到其他组件,改这里就可以了。
btn.y=this.mouseY - myData.y;
}
]]>
</mx:Script>
<mx:Canvas y="40"
id="cansAccess"
backgroundColor="#000000"
width="300"
height="200"
dragEnter="onEnter(event,'formatString')"
dragDrop="onDrop(event,'formatString')"/>
<mx:Button id="btn"
label="拖动我到面板"
mouseDown="dragSource(event,'formatString')"/>
<!--文档注释-->
<mx:TextInput width="500"
height="146"
horizontalCenter="0"
verticalCenter="-204"
fontWeight="normal"
textAlign="center">
<mx:htmlText>
<![CDATA[
Date: 2009.05.05
Email:woai_php@sina.com
QQ:1019822077
Blog:<font color="#FF0000">
<a href="http://hi.baidu.com/woaidelphi/blog/category/Flex">
http://hi.baidu.com/woaidelphi/blog/category/Flex
</a></font>
华夏之星希望和你成为朋友。一起学习,共同奋斗!!!。。。
]]>
</mx:htmlText>
</mx:TextInput>
</mx:Application>
一定要注意,标签的先后位置,Button 要在Canvas 之后.
3.Canvas容器中拖动Box,你还可以在Box中添加图片等。
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
fontSize="12">
<mx:Script>
<![CDATA[
import mx.containers.Box;
import mx.containers.Canvas;
import mx.core.IUIComponent;
import mx.events.DragEvent;
import mx.managers.DragManager;
import mx.core.DragSource;
//拖动初始器
private function dragSource(e:MouseEvent, format:String):void
{
var iu:IUIComponent=e.currentTarget as IUIComponent;
var ds:DragSource=new DragSource();
ds.addData(iu, format); //设置一个标号format
DragManager.doDrag(iu, ds, e); // 开始拖动这个物体
}
//当拖进去时
private function onEnter(e:DragEvent, format:String):void
{
if (e.dragSource.hasFormat(format)) //如果标号为format则接受拖来的物体
{
DragManager.acceptDragDrop(IUIComponent(e.target)); // 接受被拖进来的物体
}
}
//当拖完成时
private function onDrop(e:DragEvent, format:String):void
{
var box:Box=Box(e.dragInitiator); //如果扩展到其他组件,改这里Box就可以了。
box.x=e.localX;
box.y=e.localY;
}
]]>
</mx:Script>
<mx:Canvas backgroundColor="0xEEEEEE"
width="500"
height="246"
horizontalCenter="0"
verticalCenter="0"
dragEnter="onEnter(event,'boxFormat')"
dragDrop="onDrop(event,'boxFormat')">
<mx:Box id="boxDrag"
width="20"
height="20"
backgroundColor="0x00FFCC"
x="97"
y="47"
mouseDown="dragSource(event,'boxFormat');">
</mx:Box>
</mx:Canvas>
<!--文档注释-->
<mx:TextInput width="500"
height="146"
horizontalCenter="0"
verticalCenter="-204"
fontWeight="normal"
textAlign="center">
<mx:htmlText>
<![CDATA[
Date: 2009.05.05
Email:woai_php@sina.com
QQ:1019822077
Blog:<font color="#FF0000">
<a href="http://hi.baidu.com/woaidelphi/blog/category/Flex">
http://hi.baidu.com/woaidelphi/blog/category/Flex
</a></font>
华夏之星希望和你成为朋友。一起学习,共同奋斗!!!。。。
]]>
</mx:htmlText>
</mx:TextInput>
</mx:Application>
4.图片的拖动
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="vertical"
width="100%"
height="100%"
fontSize="12">
<mx:Script>
<![CDATA[
private var oldX:Number; //拖动开始是的坐标
private var oldY:Number;
//拖动开始
private function dragStart(event:MouseEvent):void
{
oldX=event.stageX; //相对Application的坐标
oldY=event.stageY;
}
//拖动结束
private function dragEnd(event:MouseEvent):void
{
lbl.text="Local (x,y):" + event.localX.toString() + "," + event.localX.toString(); //相对图片的坐标
lbl2.text="Stage (x,y):" + event.stageX.toString() + "," + event.stageY.toString(); //相对Application的坐标
if (event.buttonDown)
{ //如果鼠标在移动过程中并且按下,也就是说鼠标的拖动事件。
var x:Number=event.stageX - oldX; //相对Application的坐标的移动量
var y:Number=event.stageY - oldY;
oldX=event.stageX; //更新拖动开始是的坐标
oldY=event.stageY;
img.move(img.x + x, img.y + y); //img是 Image的id,如果扩展到其他组件,改这里就可以了。
}
}
]]>
</mx:Script>
<mx:Label x="10"
y="10"
text=""
id="lbl"/>
<mx:Label x="10"
y="27"
text=""
id="lbl2"/>
<mx:Panel x="257"
y="71"
width="700"
height="80%"
layout="absolute"
horizontalScrollPolicy="off"
verticalScrollPolicy="off"
title="图片在面板中的拖动例子"
fontSize="12">
<mx:Image id="img"
x="0"
y="0"
source="test.JPG"
mouseMove="dragEnd(event)"
mouseDown="dragStart(event)"/>
</mx:Panel>
<!--文档注释-->
<mx:TextInput width="500"
height="146"
fontWeight="normal"
textAlign="center">
<mx:htmlText>
<![CDATA[
Date: 2009.05.05
Email:woai_php@sina.com
QQ:1019822077
Blog:<font color="#FF0000">
<ahref="http://hi.baidu.com/woaidelphi/blog/category/Flex">
http://hi.baidu.com/woaidelphi/blog/category/Flex
</a></font>
华夏之星希望和你成为朋友。一起学习,共同奋斗!!!。。。
]]>
</mx:htmlText>
</mx:TextInput>
</mx:Application>
5.从外部拖动到组件,比如从桌面上拖动一个图片到图片组件等。
因为我的flash包中没有flash.events.NativeDragEvent等。所以这里先不总结了。
6.引入dNdLib.swc库让拖动变得更简单
Flex开放了它的拖拽库(即:flex-drag-n-drop-lib),我们可以利用它做一些很有用的拖拽应用,下面我们
来做一个简单的示例,按照下述的步骤,你会了解到在Flex中使用flex-drag-n-drop-lib的技巧。
1.点击这里下载SWC组件到你的桌面。
2.打开FlexBuilder,新建一个Flex Project,在第三步的Library Path选项中,点击Add SWC按钮,将刚才下
载到的SWC组件引入到项目中。
3.点击Finish,在自动创建的MXML文件中,敲入以下代码:
Xml代码
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml"
layout="absolute"
xmlns:containers="dNdLib.containers.*"
fontSize="12">
<mx:Script>
<![CDATA[
import dNdLib.managers.DnDManager;
]]>
</mx:Script>
<containers:DnDContainer borderStyle="solid"
id="left"
backgroundColor="#FFFFFF"
width="161"
height="237"
x="110"
y="168">
<mx:Button label="拖动我"
mouseDown="DnDManager.getInstance().doDrag(event)"
width="92"
height="32"/>
<mx:CheckBox label="拖动就这么简单"
mouseDown="DnDManager.getInstance().doDrag(event)"/>
</containers:DnDContainer>
<containers:DnDContainer borderStyle="solid"
id="bottom"
backgroundColor="#FFFFFF"
x="415"
y="168"
width="140"
height="237"/>
</mx:Application>
然后Run一下看看结果吧,组件可以拖动了。很简单吧。
注意:必须为DnDContainer设置一个背景色(backgroundColor=color),否则可能无法产生相应区域。
转自http://vipoyb.iteye.com/blog/437684
发表评论
-
Flex4之皮肤定制【Skin类和Skin类】
2013-10-05 19:19 1172第一、关于spark.skin.SparkSkin类的 ... -
基于 Cairngorm MVC 框架的 Flex 程序设计与开发
2013-10-05 18:38 1037翟 峰, 开发工程师, IBM 吴 镝, IBM 实习生, I ... -
flex 4.5 simple spark button skinning
2013-09-24 22:09 1209Anyone missed the old simple me ... -
swf复制到其他文件夹出现安全错误的解决办法
2012-08-16 10:06 1240相信用Flash Builder/Flex Builder做开 ... -
在flex中使用model标签读取配置文件的方法
2012-08-16 09:54 10051.使用 Model标签 <mx:Model id=& ... -
Flex利用渲染器动态修改tree的icon图标
2012-08-16 09:50 1795Tree: <mx:Tree dataProvide ... -
flex xml操作
2012-04-25 10:48 1196今天我们来看看AS3中新的XML处理方法:E4X,直到现在,E ... -
Flex 创建过滤特定文件的FileReference
2012-03-01 16:13 1675下面的代码演示了Flex中如何创建一个可以过滤特定后缀文件的F ... -
Flex 根据图片url获取bitmapdata并绑定到多个Image
2012-03-01 14:40 3062private function getImage(url ... -
Flex 开始日期与结束日期DateField组件
2012-03-01 13:45 1846<?xml version="1.0&qu ... -
匹配已选中数据的某字段和下拉框数据
2012-03-01 08:41 1330package YD.Web.Common.Utils ... -
解决flex4 spark 找不到外观错误
2012-02-27 14:01 1926spark组件为了提高性能adobe做了很多努力,同 ... -
Flex垃圾回收和性能优化的一些总结
2012-02-27 11:30 1222本文是Kenshin根据一些对 ... -
【转】关于Flex未来走向的问答
2011-11-22 09:50 1807•转自:http://www.riadev.com/flex- ... -
Flex 关于validateNow方法
2011-11-18 10:42 2321validateNow(); 官方解释:验证并更新此对 ... -
Flex 数值转IP
2011-11-18 10:19 927package common { public cl ... -
Flex 关于遍历
2011-11-18 10:15 1059获取XML属性名、值 var x : XML = < ... -
Flash Builder编译的swf为什么在bin-debug下运行正常,复制到其他文件夹就不正常?
2011-11-08 16:54 1634相信用Flash Builder/Flex Bui ... -
Flex HttpService重用2
2011-09-28 13:30 1217HttpService工具类: package commo ... -
动态配置AMF与后台接口调用
2011-09-28 11:47 1557以下是一个AMF调用类: package common ...
相关推荐
本文旨在深入探讨Flex中的拖拽功能,包括其工作原理、关键概念、以及如何在实际项目中运用这些功能。 #### 拖放操作的三个阶段 拖放操作主要分为三个阶段:**初始化(Initiation)**、**拖动(Dragging)** 和 **...
在Flex开发中,"Flex可以拖拽的panel"是一个重要的功能点,它允许用户通过鼠标操作将面板(Panel)在界面上自由移动,提升用户体验,尤其是对于需要自定义布局的应用程序来说,这种交互方式非常实用。下面我们将深入...
在这个场景中,我们关注的是Flex实现的拖拽控件,这是一种交互式UI元素,允许用户通过鼠标操作移动元素,提供了丰富的用户体验。 拖拽功能在Flex中可以通过使用内置的DragManager类和Event类来实现。DragManager类...
在Flex4中,拖放(Drag and Drop,简称DnD)功能是一项强大的交互设计工具,它允许用户通过直观的拖动操作在界面上移动或转移数据。在本主题中,我们将深入探讨如何在Flex4中实现图片的拖放功能,包括两种模式:拖动...
在前端开发中,"flex拖拽"是一种常见交互设计,特别是在构建可自定义布局或需要用户手动调整元素位置的应用中。Flex布局(Flexible Box Layout)是CSS3的一种布局模式,它提供了一种更加灵活的方式来控制容器中子...
flex真是个很强大的工具,当然demo也是我们学习的主要方法,flex拖拽画矩形,很流畅的,一点不卡
在 Flex Tree 的拖拽操作中,主要涉及以下几个核心知识点: 1. **DragManager**: Flex 中的 DragManager 是处理拖放事件的主要对象,它负责监控和管理整个拖放过程。开发者需要通过 DragManager 来启动拖动操作,并...
在Flex中,拖拽编程是一种常见的交互设计方式,允许用户通过鼠标或其他输入设备将元素从一个位置拖动到另一个位置,常用于数据迁移、组件布局调整或游戏设计等场景。下面我们将详细探讨Flex中的拖拽编程。 1. **...
Flex组件拖拽框架是一种在Adobe Flex环境中实现的交互设计技术,允许用户通过鼠标操作将组件在界面上自由移动,从而提升用户体验和应用的可操作性。这个框架通常由一系列类和方法组成,用于处理拖放事件,跟踪鼠标...
在Flex中,拖拽功能是一项重要的用户界面交互机制,允许用户通过鼠标操作将元素从一个位置移动到另一个位置,提升了用户体验。本篇文章将详细讲解Flex拖拽库的相关知识点。 一、Flex中的拖放(Drag-and-Drop)机制 1...
这个主题聚焦于“Flex拖拽控件效果”,这是一项常见的用户交互功能,允许用户通过鼠标操作移动UI元素,提升应用的易用性和互动性。 在Flex中,实现拖放(Drag and Drop)功能主要涉及两个核心类:`DragManager`和`...
在Flex中,我们可以为任何UIComponent创建一个DragSource,定义拖动时的数据。例如,如果要拖动一个列表项,我们可以这样设置: ```actionscript var dragSource:DragSource = new DragSource(); dragSource....
在本文中,我们将深入探讨如何使用Adobe Flex与Papervision3D库相结合,实现3D拖拽功能,让用户可以从不同角度观察3D对象。Flex是一个开放源代码的框架,用于构建富互联网应用程序(RIA),而Papervision3D是Flash...
在本文中,我们将深入探讨Flex技术,特别是关于拖动、放大缩小以及在模拟地图场景中的应用。Flex是一种基于ActionScript 3.0的开放源代码框架,主要用于构建富互联网应用程序(RIA)。它允许开发者创建交互性强、...
在前端开发领域,Flex布局(Flexible Box)是用于创建弹性盒模型的一种CSS3模块,它极大地增强了网页元素的布局能力,特别是在响应式设计中。"flex拖拽效果"是指利用Flex布局来实现元素的拖放功能,使得用户可以通过...
在本主题“flex 窗口拖动与尺寸改变”中,我们将深入探讨如何实现Flex应用中的窗口操作功能。 首先,让我们理解窗口在Flex中的概念。在Flex中,我们通常使用`WindowedApplication`或`MX:Window`组件来创建一个独立...
在给定的标题“支持手动拖拽缩放flex组件的组件”中,我们可以推断出这是一个专门针对Flex环境设计的组件,它允许用户通过手动拖拽和缩放操作来调整Flex应用中的组件大小。 描述中提到的“com.janisRadins.zip”很...
在本案例中,我们关注的是一个特定的实现——"flex拖动树形",这是一种允许用户通过拖放操作在两个区域之间移动节点的自定义树形控件。 拖放功能是人机交互中常见的一种交互模式,用于在界面上移动元素,常用于文件...
在IT行业中,尤其是在Web开发领域,"flex 图片画线,拖动"是一个常见的交互功能需求,用于增强用户体验。这个功能通常涉及到HTML5、CSS3和JavaScript等技术,特别是Flex布局和SVG图形技术。让我们详细探讨一下这个...
在本文中,我们将详细探讨如何在Flex的Tree组件中实现节点的拖放操作,并且限制可拖动的节点以及拖动的目标位置。 首先,我们需要了解Flex Tree组件的基本用法。Tree组件用于显示层次结构的数据,每个节点代表数据...