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

Flex:使弹出的窗口使用Canvas可以拖拽

发布时间:2020-12-15 03:34:19 所属栏目:百科 来源:网络整理
导读:Flex:使弹出的窗口使用Canvas可以拖拽 一般来讲,Flex中弹出窗口可用titleWindow和Panel来控制,直接即可执行拖拽动作。而有时我们希望弹出的窗口是自定义的Canvas,并且也使Canvas可以拖拽,那么该如何做呢?方法就是给Canvas加拖拽监听,参见如下代码: 父

Flex:使弹出的窗口使用Canvas可以拖拽

一般来讲,Flex中弹出窗口可用titleWindow和Panel来控制,直接即可执行拖拽动作。而有时我们希望弹出的窗口是自定义的Canvas,并且也使Canvas可以拖拽,那么该如何做呢?方法就是给Canvas加拖拽监听,参见如下代码:

父页:

//弹出窗口,alertWindow为一个弹出的Canvas

var?myWin:alertWindow = alertWindow(PopUpManager.createPopUp(this,alertWindow,?true));

PopUpManager.centerPopUp(myWin);

?

alertWindow.mxml:

<?xml version="1.0" encoding="utf-8"?>

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="dragclick()" width="400" height="300" backgroundColor="#ffffff" backgroundAlpha="1">

?????<mx:Script>

???????<![CDATA[

????import?mx.managers.PopUpManager;??????????

????import?mx.controls.Alert;

?

????import?flash.events.MouseEvent;

????import?mx.containers.Canvas;

????import?mx.core.Application;

????import?mx.managers.PopUpManager;

????import?flash.display.DisplayObject;

????import?flash.events.Event;

???

???

????private?var?downXY:Point=new?Point();

????private?var?upXY:Point=new?Point();

??????

????????public?function?dragclick():void

?????????{??????????

?????????????this.addEventListener(MouseEvent.MOUSE_UP,MouseEventFunc);?????

?????????????this.addEventListener(MouseEvent.MOUSE_DOWN,MouseEventFunc);

?????????}

????????public?function?MouseEventFunc(evt:MouseEvent):void

????????{

????????????????switch?(evt.type)

????????????????{

????????????????????case?"mouseDown"?:

????????????????????????????downXY=new?Point(mouseX,mouseY);??????????????????????????????????????????????

????????????????????????????evt.currentTarget.startDrag(); ???????????????????????????????????????????????????????????????????????

????????????????????????????break;

????????????????????case?"mouseUp"?:

????????????????????????????upXY=new?Point(mouseX,mouseY); ???????????????????????????????????????????

????????????????????????????evt.currentTarget.stopDrag();????????????????????????????????????????????????????????????????????

????????????????????????????break;

????????????????????default:

???????????????????????break; ???????????????????????

????????????????}

????????????

?????????}

???????]]>

????</mx:Script>

?

但此时问题又来了,拖动窗体任何一个地方,窗体都被拖动了;假如我想通过鼠标选中窗体中的某些文字,这时是无法选中的。解决方法是:不要将监听监听到整个窗体上,而应该在Canvas加一个头,拖动窗体头时才移动窗体。代码如下:

alertWindow.mxml:

<?xml version="1.0" encoding="utf-8"?>

<mx:Canvas xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="dragclick()" width="400" height="300" backgroundColor="#ffffff" backgroundAlpha="1">

?????<mx:Script>

???????<![CDATA[

????import?mx.managers.PopUpManager;??????????

????import?mx.controls.Alert;

????import?flash.events.MouseEvent;

????import?mx.containers.Canvas;

????import?mx.core.Application;

????import?mx.managers.PopUpManager;

????import?flash.display.DisplayObject;

????import?flash.events.Event;

???

???

????private?var?downXY:Point=new?Point();

????private?var?upXY:Point=new?Point();???

??????

????????public?function?dragclick():void

?????????{??????????

?????????????labTitle.addEventListener(MouseEvent.MOUSE_UP,MouseEventFunc);?????

?????????????labTitle.addEventListener(MouseEvent.MOUSE_DOWN,MouseEventFunc);

?????????}

????????public?function?MouseEventFunc(evt:MouseEvent):void

????????{

??????????????var?cav:Canvas = evt.currentTarget.parent?as?Canvas;

????????????????switch?(evt.type)

????????????????{

????????????????????case?"mouseDown"?:

????????????????????????????downXY=new?Point(mouseX,mouseY);??????????????????????????????????????????????

????????????????????????????cav.startDrag(); ????????????????????????????????????????????????????????????????????????

????????????????????????????break;

????????????????????case?"mouseUp"?:

????????????????????????????upXY=new?Point(mouseX,mouseY); ???????????????????????????????????????????

????????????????????????????cav.stopDrag();????????????????????????????????????????????????????????????????????

????????????????????????????break;

????????????????????default:

???????????????????????break; ???????????????????????

????????????????}

????????????

?????????}

???????]]>

????</mx:Script>

??????

????<mx:Button id="_closeBtn" toolTip="关闭" click="PopUpManager.removePopUp(this);" height="20" label="?á" width="35" x="366" y="0"/>?

????<mx:Label x="0" y="0" id="labTitle" width="365" height="20"/>

</mx:Canvas>

???

?

试试,这时仅仅拖动labTitle区域才可以拖动。

(编辑:李大同)

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

    推荐文章
      热点阅读