首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

ExtJS 拖放技術實戰:DragSource 拖動到 DDTarget 指定區域

     編輯:Java 相關知識

ExtJS 拖放體系

所有拖放組件繼承 Ext.dd.DragDrop:

  • 拖動源:DD、DDProxy、DragSource、DragZone
  • 放置目標:DDTarget、DropZone

核心機制:group 參數匹配,同組內源目標可交互。

完整示例:DragSource → DDTarget





ExtJS拖放技術








這是一個拖動塊,也可用 DD、DDProxy、DragZone 創建

這裡是放置區域 DDTarget,也可用 DropZone 創建

關鍵 API 說明

進階:DragSource 完整事件鉤子


var dragSource = new Ext.dd.DragSource('element-id', {group: 'myGroup'});
dragSource.onDragStart = function() { console.log('開始拖動'); };
dragSource.onDragEnter = function(target, e) { target.el.addClass('drop-ok'); };
dragSource.onDragOut = function(target, e) { target.el.removeClass('drop-ok'); };
dragSource.onDragDrop = function(target, e) { console.log('放置到目標'); };
dragSource.onInvalidDrop = function(e) { console.log('無效放置'); };
dragSource.afterDragDrop = function(target, e, id) { console.log('放置完成'); };

DDTarget 完整事件鉤子


var dropTarget = new Ext.dd.DDTarget('target-id', 'myGroup');
dropTarget.notifyEnter = function(source, e, data) { this.el.highlight(); return true; };
dropTarget.notifyOver = function(source, e, data) { return this.dropAllowed; }; // 返回 CSS 類
dropTarget.notifyOut = function(source, e, data) { this.el.unhighlight(); };
dropTarget.notifyDrop = function(source, e, data) {
    // 處理放置業務邏輯
    return true; // 返回 true 表示放置成功
};

最佳實踐

  • group 隔離:不同功能區域使用不同 group,避免誤觸發
  • 視覺反饋:notifyOver 返回 this.dropAllowed/this.dropNotAllowed 顯示綠/紅邊框
  • 代理模式:複雜 DOM 結構拖動用 DDProxy,性能更好
  • 容器級拖放:Tree/Grid 節點拖放用 DragZone/DropZone,實現模板方法

總結

ExtJS 拖放核心在於 DragDrop 子類、group 匹配、事件鉤子鏈。DragSource + DDTarget 實現基礎元素拖放;DragZone + DropZone 支撐複雜容器節點拖放。掌握事件生命週期,即可構建豐富交互體驗。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved
類用途關鍵配置/方法
DragSource可拖動元素group、afterDragDrop、onDragEnter、onDragOut
DDTarget放置目標區域group、notifyDrop、notifyOver、notifyOut
DDProxy代理模式拖動(顯示代理元素而非原元素)proxyEl、autoOffset
DragZone/DropZone容器級拖放(Grid/Tree 內部節點拖放)getDragData/onNodeDrop 等模板方法