Ext.js 拖放

2022-05-20 14:50 更新

描述

拖放功能是為使開(kāi)發(fā)人員輕松工作而添加的強(qiáng)大功能之一。拖動(dòng)操作基本上是在某些UI元素上的點(diǎn)擊手勢(shì),同時(shí)按住鼠標(biāo)按鈕并移動(dòng)鼠標(biāo)。 在拖動(dòng)操作后釋放鼠標(biāo)按鈕時(shí),會(huì)發(fā)生放置操作。

語(yǔ)法

將類拖放到可拖動(dòng)目標(biāo)。

   var dd = Ext.create('Ext.dd.DD', el, 'imagesDDGroup', {
       isTarget: false
   });

添加拖放目標(biāo)類到drappable目標(biāo)

   var mainTarget = Ext.create('Ext.dd.DDTarget', 'mainRoom', 'imagesDDGroup', {
      ignoreSelf: false
   });

事件

 方法  描述
startDrag(int x, int y) 開(kāi)始拖放事件,參數(shù)是x和y的坐標(biāo)值。
onDrag(Event t) 正在拖放事件,當(dāng)拖放一個(gè)對(duì)象時(shí)觸發(fā),參數(shù)是mousemove鼠標(biāo)移動(dòng)事件。
onDragDrop(Event e, String|DragDrop[] id) 正在放下事件,當(dāng)一個(gè)對(duì)象放到另一個(gè)DragDrop對(duì)象上時(shí)觸發(fā),第一個(gè)參數(shù)是mouseup鼠標(biāo)放開(kāi)事件,第二個(gè)參數(shù)表示drop的目標(biāo)位置。如果是在POINT模式下,就會(huì)傳入目標(biāo)元素的id;如果是在INTERSECT模式下,則會(huì)傳入放下目標(biāo)的拖放對(duì)象數(shù)組。
endDrag(Event e) 拖放結(jié)束事件,在拖放操作結(jié)束之后觸發(fā),參數(shù)是mouseup鼠標(biāo)放開(kāi)事件。
onDragEnter(Event e, String|DragDrop[] id) 進(jìn)入drop區(qū)域事件,拖放過(guò)程中首次觸碰到drop區(qū)域時(shí)觸發(fā)。第一個(gè)參數(shù)是mousemove鼠標(biāo)移動(dòng)事件,第二個(gè)參數(shù)表示drop目標(biāo)位置。如果是在POINT模式下,就會(huì)傳入目標(biāo)元素的id;如果是在INTERSECT模式下,則會(huì)傳入放下目標(biāo)的拖放對(duì)象數(shù)組。
onDragOut(Event e, String|DragDrop[] id) 離開(kāi)drop區(qū)域事件,拖放過(guò)程中從drop區(qū)域離開(kāi)時(shí)觸發(fā)。第一個(gè)參數(shù)是mousemove鼠標(biāo)移動(dòng)事件,第二個(gè)參數(shù)表示drop目標(biāo)位置。如果是在POINT模式下,就會(huì)傳入目標(biāo)元素的id;如果是在INTERSECT模式下,則會(huì)傳入放下目標(biāo)的拖放對(duì)象數(shù)組。
onDragOver(Event e, String|DragDrop[] id) 在drop區(qū)域中拖放移動(dòng)事件,當(dāng)在drop區(qū)域拖放移動(dòng)時(shí)觸發(fā)。第一個(gè)參數(shù)是mousemove鼠標(biāo)移動(dòng)事件,第二個(gè)參數(shù)表示drop目標(biāo)位置。如果是在POINT模式下,就會(huì)傳入目標(biāo)元素的id;如果是在INTERSECT模式下,則會(huì)傳入放下目標(biāo)的拖放對(duì)象數(shù)組。
onInvalidDrop(Event e) 不能drop事件,不在drop區(qū)域移動(dòng)時(shí)觸發(fā),參數(shù)是mousemove鼠標(biāo)移動(dòng)事件。
onMouseDown(Event e) 鼠標(biāo)按下事件,參數(shù)是mousedown鼠標(biāo)按下事件。
onMouseUp(Event e)
鼠標(biāo)放開(kāi)事件,參數(shù)是mouseup鼠標(biāo)放開(kāi)事件。

例子

下面是一個(gè)簡(jiǎn)單的例子

<!DOCTYPE html>
<html>
<head>
   <link href="./ext-6.0.0/build/classic/theme-classic/resources/theme-classic-all.css" rel="stylesheet">
   <script src="./ext-6.0.0/build/ext-all.js"></script>
   <script type="text/javascript">
      Ext.application({
          launch: function() {
              var images = Ext.get('images').select('img');
              Ext.each(images.elements, function(el) {
                  var dd = Ext.create('Ext.dd.DD', el, 'imagesDDGroup', {
                      isTarget: false
                  });
              });
          }
       }); 
      var mainTarget = Ext.create('Ext.dd.DDTarget', 'mainRoom', 'imagesDDGroup', {
         ignoreSelf: false
      });
   </script>
   <style>
      #content{
         width:600px;
         height:400px;
         padding:10px;
         border:1px solid #000;
      }
      #images{
         float:left;
         width:40%;
         height:100%;
         border:1px solid Black;
         background-color:rgba(222, 222, 222, 1.0);
      }
      #mainRoom{
         float:left;
         width:55%;
         height:100%;
         margin-left:15px;
         border:1px solid Black;
         background-color:rgba(222, 222, 222, 1.0);
      }
      .image{   
         width:64px;
         height:64px;
         margin:10px;
         cursor:pointer;
         border:1px solid Black;
         display: inline-block;
      }
   </style>
</head>
<body>
   <div id="content">   
      <div id="images"> 
         <img src = "/extjs/images/1.jpg" class = "image" />
         <img src = "/extjs/images/2.jpg" class = "image" />
         <img src = "/extjs/images/3.jpg" class = "image" />
         <img src = "/extjs/images/4.jpg" class = "image" />
         <img src = "/extjs/images/5.jpg" class = "image" />
         <img src = "/extjs/images/6.jpg" class = "image" />
         <img src = "/extjs/images/7.jpg" class = "image" />
         <img src = "/extjs/images/8.jpg" class = "image" />
      </div>
      <div id="mainRoom"></div>
   </div>
</body>
</html>

這將產(chǎn)生以下結(jié)果:


 在在線環(huán)境下沒(méi)有配置圖片的正確路徑,所以圖片不能正常顯示,但這并不影響功能的展示。

在Extjs的拖放的幫助下,我們可以將數(shù)據(jù)從網(wǎng)格移動(dòng)到網(wǎng)格和網(wǎng)格到窗體。下面是在網(wǎng)格和窗體之間移動(dòng)數(shù)據(jù)的例子。

Ext.js 網(wǎng)格到網(wǎng)格拖放
Ext.js 網(wǎng)格到表單拖放


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)