加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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;
			}
		}
	}
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读