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, handleMouseMove, true);
systemManager.removeEventListener(MouseEvent.MOUSE_UP, handleMouseUp, true);
_isDragging = false;
}
}
}
}
flex可拖动的panel
最新推荐文章于 2021-08-01 18:41:05 发布