Flex拖動實現方法

2021-09-06 00:25:40 字數 4491 閱讀 5906

在互動性要求較高的系統中,拖動是一種比較常用的技術,例如,我們經常用到許可權定製、資料匯入匯出定製等功能,這種情況下,一般是目標資料集合已經確定,使用者需要從已有的集合中選擇條目,使用拖動完成實現起來比較直觀,友好;有些場景下需要允許容器內的元素能夠自由拖動,例如一些圖形設計工具。在flex中,它本身就提供了很多支援拖動的特性,很多情況下,這些特性能夠簡化我們的開發,但是也有一些情況是需要我們自定義實現的。本文介紹了三種flex中進行拖動的方法。

方法一:list中資料的拖動

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

dragenabled="true" width="162" labelfield="name">

name="item a"/>

name="item b"/>

name="item c"/>

dropenabled="true" x="196" y="0" width="171" labelfield="name">

通過指定list的dragenabled=true來允許list控制項資料支援拖動,指定dropenabled=true來允許list控制項支援接受拖動資料。

方法二:容器中控制項的拖動

這種方式下控制項的拖動有兩種方法,一種是利用flex自身的實現,一種是使用自定義的實現。對於flex內的所有可視控制項,都支援startdrag()和stopdrag()方法,我們通過定製相應的事件即可完成拖動的操作。例如:

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

importmx.core.uicomponent;

privatefunctionstart(e:mouseevent):void

privatefunctionstop(e:mouseevent):void

]]>

x="0" y="0" width="100%" height="100%">

x="237" y="69" label="button" mousedown="start(event)" mouseup="stop(event)"/>

x="424" y="49" label="checkbox" mousedown="start(event)" mouseup="stop(event)"/>

x="344" y="138" mousedown="start(event)" mouseup="stop(event)"/>

x="267" y="233" text="label" mousedown="start(event)" mouseup="stop(event)"/>

x="412" y="196" mousedown="start(event)" mouseup="stop(event)"/>

第二種方法就是自定義拖動的實現,主要的原理就是:在控制項mousedown之後,給所處的container註冊mousemove和mouseup事件及處理函式;mousemove的時候計算滑鼠移動的值,然後將控制項座標做相應的改變,mouseup的時候移除mousemove和mouseup處理函式。

**如下:

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

importflowdesigner.activitynode;

importui.action.objecthandles;

privatevarmousedownposition:point=null;

privatefunctioninit():void

publicfunctioncomponentmousedownhandler(e:mouseevent):void

publicfunctioncontainermousemovehandler(e:mouseevent):void

publicfunctioncontainermouseuphandler(e:mouseevent):void

]]>

id="container" width="100%" height="100%" backgroundcolor="#fffdfd">

id="todrag" width="121" height="82" backgroundcolor="#ba8080"/>

init中給需要拖動的控制項註冊mousedown處理函式;滑鼠按下的時候給容器註冊mousemove和mouseup處理函式,同時記錄初始座標值;mousemove的時候,將當前事件座標值和原始座標值分別轉換為容器中相對座標值,然後計算x、y座標軸上的相對移動距離,最後設定控制項座標值;mouseup時取消相應的事件處理。

方法三:自定義拖動

這種方式一般能夠滿足大多數的情景,通過dragmanager自己實現dragenter,dragdrop事件來完成拖動功能。

dragmanager 類管理拖放操作。當使用者使用滑鼠選擇某個專案時,所選元件稱為拖動啟動器。拖動操作期間顯示的影象稱為拖動**。當使用者將拖動**移動到其它元件時,系統會向該元件傳送 dragenter 事件。如果該元件接受拖動,即可成為拖放目標,並接收 dragover、dragexit 和 dragdrop 事件。拖動操作完成後,會向拖動啟動器傳送 dragcomplete 事件。dragsource 類中包含正被拖動的資料。

**如下:

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

importmx.containers.canvas;

importmx.core.dragsource;

importmx.managers.dragmanager;

importmx.controls.image;

importmx.events.dragevent;

privatefunctionbegindrag(e:mouseevent):void

privatefunctionacceptdrag(e:dragevent):void

privatefunctioncompletedrag(e:dragevent):void

);img.addeventlistener(mouseevent.mouse_up,function(e:mouseevent):void);

varcontainer:canvas=e.currenttargetascanvas;

container.addchild(img);

}]]>

x="56" y="61" width="520" height="435">

width="100%" height="40" x="20" y="50">

source="assets/test.gif" mousedown="begindrag(event)" width="23" height="19" x="10" y="11"/>

width="448" height="358" dragenter="acceptdrag(event)" dragdrop="completedrag(event)" bordercolor="#39749d" borderstyle="solid" backgroundcolor="#ede5e5">

首先,我們對需要拖動的物件增加mousedown處理函式,本例中是對image物件進行拖動,mousedown中首先獲取當前事件物件,然後建立乙個副本,同時將該副本作為拖動源,通過dragmanager開始拖動;對於接受拖動物件的容器dragenter時通過dragmanager.acceptdragdrop來指定該容器可接受拖動物件,最後在接受拖動物件容器的dragdrop事件處理函式中進行拖動完成的相關處理,本例中是向容器中增加圖形。

Flex拖動實現方法

在互動性要求較高的系統中,拖動是一種比較常用的技術,例如,我們經常用到許可權定製 資料匯入匯出定製等功能,這種情況下,一般是目標資料集合已經確定,使用者需要從已有的集合中選擇條目,使用拖動完成實現起來比較直觀,友好 有些場景下需要允許容器內的元素能夠自由拖動,例如一些圖形設計工具。在flex中,它本...

Flex拖動實現方法

在互動性要求較高的系統中,拖動是一種比較常用的技術,例如,我們經常用到許可權定製 資料匯入匯出定製等功能,這種情況下,一般是目標資料集合已經確定,使用者需要從已有的集合中選擇條目,使用拖動完成實現起來比較直觀,友好 有些場景下需要允許容器內的元素能夠自由拖動,例如一些圖形設計工具。在flex中,它本...

flex的tree之間拖動

tree的xml內容 var company xml treelabel,在tree控制項的屬性中指定,可以根據解析xml的內容顯示所需節點 private function treelabel item object string 繫結tree的dataprovider bindable var ...