五步掌握Ext的拖放(下)

简介: 接上篇URL:http://blog.csdn.net/zhangxin09/archive/2010/05/03/5551665.aspx 。 第三步:设置置下目标 明确需求是怎么样的:除了 rented 和repair 可接纳拖动元素,cars和trucks本身也是可以的。

接上篇URL:http://blog.csdn.net/zhangxin09/archive/2010/05/03/5551665.aspx

第三步:设置置下目标

明确需求是怎么样的:除了 rentedrepair 可接纳拖动元素,cars和trucks本身也是可以的。总之是使用 DDTarget 来负责放下的目标。代码如下:

//Instantiate instances of Ext.dd.DDTarget for the cars and trucks container var carsDDTarget = new Ext.dd.DDTarget('cars','carsDDGroup'); var trucksDDTarget = new Ext.dd.DDTarget('trucks', 'trucksDDGroup'); //Instantiate instnaces of DDTarget for the rented and repair drop target elements var rentedDDTarget = new Ext.dd.DDTarget('rented', 'carsDDGroup'); var repairDDTarget = new Ext.dd.DDTarget('repair', 'carsDDGroup'); //Ensure that the rented and repair DDTargets will participate in the trucksDDGroup rentedDDTarget.addToGroup('trucksDDGroup'); repairDDTarget.addToGroup('trucksDDGroup');

上述代码中,为 carstrucks、 rented repair 设置了置下目标。注意cars 容器的元素只能参与“carsDDGroup”的拖动,trucks 容器的元素只能参与“trucksDDGroup”的拖动。接着是rented repair DDTarget 设置,这里有构造器的定义carsDDGroup,也有addToGroup方法加入的trucksDDGroup,两种途径皆可。

OK,已经设置好置下目标了。下面是有效置下后的结果。

点击图片 打开演示。

我们看见这些拖动元素的确是成功到达目的地,可是图片摆放的乱七八糟,还是要整理一下才行,也就是继续所说的“完成置下complete drop”的这一步骤。同样也是重写DD 实例的方法。

第四步:完成置放

实质是用DOM方法把始发点的元素改换到目标父级元素上。重写下面的onDragDrop 方法。

// 拖放过程成功了就执行该方法e onDragDrop : function(evtObj, targetElId) { // 建立置下目标的Ext.Element实例 var dropEl = Ext.get(targetElId); // 不在同一drop区域里面的才算完成drop。同一个target目标没意义。 if (this.el.dom.parentNode.id != targetElId) { // 移动元素 dropEl.appendChild(this.el); // Remove the drag invitation this.onDragOut(evtObj, targetElId); // 清除样式 this.el.dom.style.position =''; this.el.dom.style.top = ''; this.el.dom.style.left = ''; } else { // 无效的drop this.onInvalidDrop(); }

不在同一drop区域里面的才算完成投放置下。同一个target目标没意义,视作无效drop,故执行onInvalidDrop。

 

点击以上图片 观看完整的置下操作。

只要可以成功置下,父级元素辖下的元素就不复存在,移动到置下目标上。

如果拖动的时候进入了有效地目标范围内,用户是不是应该给予他们一点提示呢?下面的就是一个drop邀请,就是告诉用户您快来吧,可以置下喽。

第五步:加入邀请置下(drop invitation)

如上述,此时此刻我们重写的是 onDragEnter 以及 onDragOut 方法。

// Only called when the drag element is dragged over the a drop target with the same ddgroup onDragEnter : function(evtObj, targetElId) { // 添加CSS颜色 if (targetElId != this.el.dom.parentNode.id) { this.el.addClass('dropOK'); } else { // 移除邀请 this.onDragOut(); } }, // 当离开拖动范围的时候触发 onDragOut : function(evtObj, targetElId) { this.el.removeClass('dropOK'); }

当然了,onDragEnter 以及 onDragOut 只会在同一个DD组里面的交互才会生效。

onDragEnter 方法在鼠标指针刚刚碰到置下区域其边缘的时候就会触发,反之,onDragOut 方法就是离开边缘的时候就会立刻触发。

 

点击以上的图片 演示drop邀请。

通过演示,我们可以看进入可投下的区域的时候就会高亮的现实效果(周围是绿色的),离开该一区域就不会显示。

继续阅读

Ext JS框架中很多组件都可以使用拖放,总之不一而足。通过下面不同的例子来继续进一步深化拖放操作的学习(官方的):

摘要

今天的学习过程中,我们了解了怎么使用最底层的拖放类实现来进行DOM节点的完整拖放。希望阁下能收获到DD操作的一些基本操作原理,并且我们希望,在以后的日子,可以就该方面写更多的文章。

 

目录
相关文章
|
7月前
|
容器
从零开始设计一个右键菜单组件
从零开始设计一个右键菜单组件
37 0
|
JavaScript 前端开发
原生js制作选项卡详解,适合无基础的人学习
原生js制作选项卡详解,适合无基础的人学习
109 0
原生js制作选项卡详解,适合无基础的人学习
|
移动开发 JavaScript 测试技术
《大胖 • 小课》- 拖拽和剪贴板文件上传
这是《大胖小课》栏目的专题一《说说文件上传那些事儿》的第5节-《实现文件拖拽和剪贴板上传》 专题已经更新章节: 《大胖 • 小课》- 我是这样理解文件上传原理的 《大胖 • 小课》- 写一个文件上传接口 《大胖 • 小课》- 不用 js 实现文件无刷新上传 《大胖 • 小课》- 玩玩多文件配多进度上传
126 1
《大胖 • 小课》- 拖拽和剪贴板文件上传
【C#】【桌面应用开发】拖拽文件到文本框获得所拖拽文件的路径
【C#】【桌面应用开发】拖拽文件到文本框获得所拖拽文件的路径
193 0
【C#】【桌面应用开发】拖拽文件到文本框获得所拖拽文件的路径
|
JavaScript 前端开发 测试技术
ExtJS前端实现过程
从无到有的实现过程
1907 0
Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案
Ext1.X的CheckboxSelectionModel默认全选之后不允许编辑的BUG解决方案,ext 的CheckboxSelectionModel在后台默认选中之后,前台就不允许编辑的bug是存在的,因为CheckboxSelectionModel没有Disabled="true"的设置,只能想办法弥补,毕竟不能直接给GridPanel设置Disabled="true"这样的话,整个GridPanel都成灰色的了,显然不能满足用户的需求,不科学的界面如图:   那么怎么样处理这个问题呢。
851 0
CKEditor+SWFUpload实现功能较为强大的编辑器(三)---后台接收图片流程
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq1010885678/article/details/37519271 在...
886 0