一个Flex鼠标拖拽图片的简单例子(附源码)
来源:互联网 发布:佣金搜索采集软件 编辑:程序博客网 时间:2024/05/16 17:14
参考了网上诸多例子,自己动手写一个简单的例子,以下只针对关键代码做重点讲解。
该例子仅供初学者参考。
给图片绑定了鼠标左键向下的事件(MouseEvent.MOUSE_DOWN)触发函数dragImage(e:MouseEvent, messages:String),该函数主要实现4个动作:
1. 初始化拖动对象dragInitiator,e是当前被触发的事件,e.currentTarget则是事件当前的对象。
2. 装载数据对象或数据源dragSource,拖动过程中需要传递的信息必须使用DragSource作为载体。双引号里面的“messages”是被传递对象的别名,到了另一端,我们必须根据这个别名来取出数据。
3. 设置代理对象dragProxy,这个对象可以看成是根据源对象产生的一个副本,可以认为是源对象在目标容器中的“影子”,一个临时的对象。
4. 将dragInitiator、dragSource、dragProxy,以及鼠标事件e一起提交给DragManager的doDrag方法管理。
这个函数是被拖动的对象进入目标容器时触发的,必须将其绑定给目标容器的dragEnter事件,其中值得注意的是,传给DragManager.acceptDragDrop的dropTarget必须是目标容器。
同理,这个函数是被拖动的对象进入目标容器后鼠标左键被释放时触发的,必须将其绑定给目标容器的dragDrop事件。
此时,我们通过将被拖动的对象e.dragInitiator,以及在这过程中用“messages”别名保存起来的字符串拿出来,把它addChild在dropTarget后面,同时设置好被拖动对象的X,Y坐标,我们就实现了图片的拖拽功能。
有一点需要注意的是,Flex中对对象的引用使用的是地址引用,所以我们看到这段代码
事实上是将整个被拖动对象挂在了目标容器中。
例如,一个数组:
var intArray:Array=new Array("1","2","3","4","5");
var tempArray:Array;
tempArray=intArray;
tempArray.splice(1,1);
trace(intArray);
输出的结果:1,3,4,5
该例子仅供初学者参考。
- public function dragImage(e:MouseEvent, messages:String):void
- {
- var dragInitiator:Image=e.currentTarget as Image;
- var dragSource:DragSource=new DragSource();
- dragSource.addData(messages, "messages"); // Alias for messages
- var dragProxy:Image=new Image();
- dragProxy.source=e.currentTarget.source;
- DragManager.doDrag(dragInitiator, dragSource, e, dragProxy);
- }
public function dragImage(e:MouseEvent, messages:String):void{var dragInitiator:Image=e.currentTarget as Image;var dragSource:DragSource=new DragSource();dragSource.addData(messages, "messages");// Alias for messagesvar dragProxy:Image=new Image();dragProxy.source=e.currentTarget.source;DragManager.doDrag(dragInitiator, dragSource, e, dragProxy);}
给图片绑定了鼠标左键向下的事件(MouseEvent.MOUSE_DOWN)触发函数dragImage(e:MouseEvent, messages:String),该函数主要实现4个动作:
- var dragInitiator:Image=e.currentTarget as Image;
var dragInitiator:Image=e.currentTarget as Image;
1. 初始化拖动对象dragInitiator,e是当前被触发的事件,e.currentTarget则是事件当前的对象。
- var dragSource:DragSource=new DragSource();
- dragSource.addData(messages, "messages");
var dragSource:DragSource=new DragSource();dragSource.addData(messages, "messages");
2. 装载数据对象或数据源dragSource,拖动过程中需要传递的信息必须使用DragSource作为载体。双引号里面的“messages”是被传递对象的别名,到了另一端,我们必须根据这个别名来取出数据。
- var dragProxy:Image=new Image();
- dragProxy.source=e.currentTarget.source;
var dragProxy:Image=new Image();dragProxy.source=e.currentTarget.source;
3. 设置代理对象dragProxy,这个对象可以看成是根据源对象产生的一个副本,可以认为是源对象在目标容器中的“影子”,一个临时的对象。
- DragManager.doDrag(dragInitiator, dragSource, e, dragProxy);
DragManager.doDrag(dragInitiator, dragSource, e, dragProxy);
4. 将dragInitiator、dragSource、dragProxy,以及鼠标事件e一起提交给DragManager的doDrag方法管理。
- public function dragEnterHandler(e:DragEvent):void
- {
- var dropTarget:Panel=e.currentTarget as Panel; // Note: 'dropTarget' is the target container where the mouse attempts to release
- DragManager.acceptDragDrop(dropTarget);
- }
public function dragEnterHandler(e:DragEvent):void{var dropTarget:Panel=e.currentTarget as Panel;//Note: 'dropTarget' is the target container where the mouse attempts to releaseDragManager.acceptDragDrop(dropTarget);}
这个函数是被拖动的对象进入目标容器时触发的,必须将其绑定给目标容器的dragEnter事件,其中值得注意的是,传给DragManager.acceptDragDrop的dropTarget必须是目标容器。
- public function dragDropHandler(e:DragEvent):void
- {
- var x:Number=e.localX;
- var y:Number=e.localY;
- var tarImage:Image=e.dragInitiator as Image;
- tarImage.x=x;
- tarImage.y=y;
- var dropTarget:Panel=e.currentTarget as Panel;
- dropTarget.addChild(tarImage);
- var messages:String=String(e.dragSource.dataForFormat("messages"));
- Alert.show(messages);
- }
public function dragDropHandler(e:DragEvent):void{var x:Number=e.localX;var y:Number=e.localY;var tarImage:Image=e.dragInitiator as Image;tarImage.x=x;tarImage.y=y;var dropTarget:Panel=e.currentTarget as Panel;dropTarget.addChild(tarImage);var messages:String=String(e.dragSource.dataForFormat("messages"));Alert.show(messages);}
同理,这个函数是被拖动的对象进入目标容器后鼠标左键被释放时触发的,必须将其绑定给目标容器的dragDrop事件。
- var tarImage:Image=e.dragInitiator as Image;
var tarImage:Image=e.dragInitiator as Image;
此时,我们通过将被拖动的对象e.dragInitiator,以及在这过程中用“messages”别名保存起来的字符串拿出来,把它addChild在dropTarget后面,同时设置好被拖动对象的X,Y坐标,我们就实现了图片的拖拽功能。
有一点需要注意的是,Flex中对对象的引用使用的是地址引用,所以我们看到这段代码
- var dropTarget:Panel=e.currentTarget as Panel;
- dropTarget.addChild(tarImage);
var dropTarget:Panel=e.currentTarget as Panel;dropTarget.addChild(tarImage);
事实上是将整个被拖动对象挂在了目标容器中。
例如,一个数组:
var intArray:Array=new Array("1","2","3","4","5");
var tempArray:Array;
tempArray=intArray;
tempArray.splice(1,1);
trace(intArray);
输出的结果:1,3,4,5
- 一个Flex鼠标拖拽图片的简单例子(附源码)
- 两个Flex的例子(附源码)
- 我用Silverlight做的一个简单的浏览图片的程序(附源码)
- 从网络上下载图片的简单小例子【附源码】
- 一个简单的滑动门示例(附源码)
- 一个Flex做的简单图片浏览器
- trie树的一个简单例子源码
- 一个简单的图片展示例子
- php 导出 简单例子附源码
- 这是一个鼠标拖动网页窗体的简单例子
- 一个鼠标拖动网页窗体的简单例子
- flex 简单例子(含实例效果图 源码)
- 终于解决!图片随鼠标移动在FireFox下实现,另附一个好玩的图片随鼠标伸缩效果
- 我做的一个简单的Sliverlight站点演示(附源码)
- 一个简单的示例讲解游戏游戏编程原理。附示例源码(转)
- 【分享】分享一个基于SSH实现的简单学生选课系统(附源码)
- 一个简单的文件MD5码自动计算比较器(附源码)
- Flex 简单的DataGrid 例子
- 本程序实现转码一个普通视频文件为视频mpeg4,音频mp3的功能
- Activity设置全屏以及Android获得屏幕的宽和高
- 乱七八糟的几个记录:这些软件是干什么的。
- 如何让Android横竖屏切换时不销毁当前activity
- linux下配置JRE和Tomcat环境变量
- 一个Flex鼠标拖拽图片的简单例子(附源码)
- 连等的if语句_小心编译器
- 网上开店步骤
- hadoop-0.20.2-examples.jar grep 示例
- Redhat上安装apache-tomcat
- jquery 实现多级下拉菜单
- Maximum execution time of 30 seconds exceeded
- android Fragments详解
- android am start 启动某个apk