flex可拖动的panel
发布时间:2020-12-15 03:55:26 所属栏目:百科 来源:网络整理
导读:package createDrag{import mx.containers.Panel;import flash.events.MouseEvent;import flash.geom.Point;/** * 可拖动panel组件 */public class DragPanel extends Panel{private var _startX: Number;private var _startY: Number;private var _dragStar
package createDrag{ import mx.containers.Panel; import flash.events.MouseEvent; import flash.geom.Point; /** * 可拖动panel组件 */ public class DragPanel extends Panel{ private var _startX: Number; private var _startY: Number; private var _dragStartX: Number; private var _dragStartY: Number; private var _isDragging: Boolean = false; /** *createChildren(子组件创建完成)方法执行完后,派发initialize(初始化事件) */ override public function initialize(): void { super.initialize(); addEventListener(MouseEvent.MOUSE_DOWN,handleMouseDown); } /** *鼠标按下事件处理函数 * @param event */ private function handleMouseDown(event: MouseEvent): void { var contentPoint: Point = globalToContent(new Point(event.stageX,event.stageY)); //此时以内容区域的点为参考,可拖动区域的y坐标始终为负数 if (contentPoint.y < 0) { //在鼠标事件,我们需要捕获所有移动/事件,甚至如果我们没有目标(因为鼠标通常会离开我们的当前的边界)。 //为此,我们与顶级注册这些听众SystemManager,并设置useCapture第一个真正获得打开事件。 //这基本上相当于老setCapture()方法。 systemManager.addEventListener(MouseEvent.MOUSE_MOVE,handleMouseMove,true);//在捕获阶段获取事件 systemManager.addEventListener(MouseEvent.MOUSE_UP,handleMouseUp,true); _startX = x; _startY = y; _dragStartX = event.stageX; trace(x+"----------"+event.stageX) _dragStartY = event.stageY; // Clear any constraints that might have been set,so we can move around freely. clearStyle("left"); clearStyle("right"); clearStyle("top"); clearStyle("bottom"); clearStyle("horizontalCenter"); clearStyle("verticalCenter"); _isDragging = true; } } /** *鼠标移动事件处理函数 * @param event */ private function handleMouseMove(event: MouseEvent): void { if (_isDragging) { // 不允许的实际目标事件来处理它。 event.stopImmediatePropagation(); move(_startX + event.stageX - _dragStartX,_startY + event.stageY - _dragStartY); } } /** *鼠标抬起事件处理函数 * @param event */ private function handleMouseUp(event: MouseEvent): void { if (_isDragging) { // 不允许的实际目标事件来处理它。 event.stopImmediatePropagation(); move(_startX + event.stageX - _dragStartX,_startY + event.stageY - _dragStartY); systemManager.removeEventListener(MouseEvent.MOUSE_MOVE,true); systemManager.removeEventListener(MouseEvent.MOUSE_UP,true); _isDragging = false; } } } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |