EasyUI-treegrid-拖拽的实现(drag and drop)
2013-09-20 11:37
507 查看
先声明下,核心代码是从国外论坛找的,我只是加了个获取 源节点ID跟目的节点ID 然后用EasyUI的API实现
用法:onLoadSuccess: function (row, param) {
enableDnd(TreeGrid);
}
个人感觉,把这个函数放在 onLoadSuccess是合适的,总得等节点加载完嘛
function enableDnd(t) {
var srcID = null;
var nodes = t.treegrid('getPanel').find('tr[node-id]');
nodes.find('span.tree-hit').bind('mousedown.treegrid', function () {
return false;
});
nodes.draggable({
disabled: false,
revert: true,
cursor: 'pointer',
proxy: function (source) {
var p = $('<div class="tree-node-proxy tree-dnd-no"></div>').appendTo('body');
p.html($(source).find('.tree-title').html());
p.hide();
return p;
},
deltaX: 15,
deltaY: 15,
onBeforeDrag: function () {
$(this).next('tr.treegrid-tr-tree').find('tr[node-id]').droppable({ accept: 'no-accept' });
},
onStartDrag: function () {
srcID = $(this).attr("node-id");
$(this).draggable('proxy').css({
left: -10000,
top: -10000
});
},
onDrag: function (e) {
$(this).draggable('proxy').show();
this.pageY = e.pageY;
},
onStopDrag: function () {
$(this).next('tr.treegrid-tr-tree').find('tr[node-id]').droppable({ accept: 'tr[node-id]' });
}
}).droppable({
accept: 'tr[node-id]',
onDragOver: function (e, source) {
var pageY = source.pageY;
var top = $(this).offset().top;
var bottom = top + $(this).outerHeight();
$(source).draggable('proxy').removeClass('tree-dnd-no').addClass('tree-dnd-yes');
$(this).removeClass('row-append row-top row-bottom');
if (pageY > top + (bottom - top) / 2) {
if (bottom - pageY < 5) {
$(this).addClass('row-bottom');
} else {
$(this).addClass('row-append');
}
} else {
if (pageY - top < 5) {
$(this).addClass('row-top');
} else {
$(this).addClass('row-append');
}
}
},
onDragLeave: function (e, source) {
$(source).draggable('proxy').removeClass('tree-dnd-yes').addClass('tree-dnd-no');
$(this).removeClass('row-append row-top row-bottom');
},
onDrop: function (e, source) {
var action, point;
if ($(this).hasClass('row-append')) {
action = 'append';
} else {
action = 'insert';
point = $(this).hasClass('row-top') ? 'top' : 'bottom';
}
$(this).removeClass('row-append row-top row-bottom');
var desID = $(this).attr("node-id");
//弹出当前拖拽的node
var srcNode = t.treegrid('pop', srcID);
if (action == "append") {
t.treegrid('append', {
parent: desID,
data: [srcNode]
});
} else if (action == "insert") {
if (point == "top") {
t.treegrid('insert', {
before: desID,
data:srcNode
});
} else {
t.treegrid('insert', {
after: desID,
data: srcNode
});
}
}
}
});
}
用法:onLoadSuccess: function (row, param) {
enableDnd(TreeGrid);
}
个人感觉,把这个函数放在 onLoadSuccess是合适的,总得等节点加载完嘛
function enableDnd(t) {
var srcID = null;
var nodes = t.treegrid('getPanel').find('tr[node-id]');
nodes.find('span.tree-hit').bind('mousedown.treegrid', function () {
return false;
});
nodes.draggable({
disabled: false,
revert: true,
cursor: 'pointer',
proxy: function (source) {
var p = $('<div class="tree-node-proxy tree-dnd-no"></div>').appendTo('body');
p.html($(source).find('.tree-title').html());
p.hide();
return p;
},
deltaX: 15,
deltaY: 15,
onBeforeDrag: function () {
$(this).next('tr.treegrid-tr-tree').find('tr[node-id]').droppable({ accept: 'no-accept' });
},
onStartDrag: function () {
srcID = $(this).attr("node-id");
$(this).draggable('proxy').css({
left: -10000,
top: -10000
});
},
onDrag: function (e) {
$(this).draggable('proxy').show();
this.pageY = e.pageY;
},
onStopDrag: function () {
$(this).next('tr.treegrid-tr-tree').find('tr[node-id]').droppable({ accept: 'tr[node-id]' });
}
}).droppable({
accept: 'tr[node-id]',
onDragOver: function (e, source) {
var pageY = source.pageY;
var top = $(this).offset().top;
var bottom = top + $(this).outerHeight();
$(source).draggable('proxy').removeClass('tree-dnd-no').addClass('tree-dnd-yes');
$(this).removeClass('row-append row-top row-bottom');
if (pageY > top + (bottom - top) / 2) {
if (bottom - pageY < 5) {
$(this).addClass('row-bottom');
} else {
$(this).addClass('row-append');
}
} else {
if (pageY - top < 5) {
$(this).addClass('row-top');
} else {
$(this).addClass('row-append');
}
}
},
onDragLeave: function (e, source) {
$(source).draggable('proxy').removeClass('tree-dnd-yes').addClass('tree-dnd-no');
$(this).removeClass('row-append row-top row-bottom');
},
onDrop: function (e, source) {
var action, point;
if ($(this).hasClass('row-append')) {
action = 'append';
} else {
action = 'insert';
point = $(this).hasClass('row-top') ? 'top' : 'bottom';
}
$(this).removeClass('row-append row-top row-bottom');
var desID = $(this).attr("node-id");
//弹出当前拖拽的node
var srcNode = t.treegrid('pop', srcID);
if (action == "append") {
t.treegrid('append', {
parent: desID,
data: [srcNode]
});
} else if (action == "insert") {
if (point == "top") {
t.treegrid('insert', {
before: desID,
data:srcNode
});
} else {
t.treegrid('insert', {
after: desID,
data: srcNode
});
}
}
}
});
}
相关文章推荐
- VC实现文件管理器拖拽(Drag-and-Drop)
- 在.NET中实现窗体控件的内容拖拽效果(Drag-and-Drop)
- Unity3D-UGUI-drag and drop实现拖拽放下功能
- 分享一个HTML5的drag and drop API实现的图片拖拽分组效果
- 分享一个HTML5的drag and drop API实现的图片拖拽分组效果
- 分享一个HTML5的drag and drop API实现的图片拖拽分组效果
- VC实现文件管理器拖拽(Drag-and-Drop)
- Easyui 在dialog中加载datagrid,并实现可拖放行(drag and drop rows)
- SWT 应用程序 实现的Drag and Drop(DND) 和 GEF 树上元素的拖拽
- 分享一个HTML5的drag and drop API实现的图片拖拽分组效果
- RCP:拖拽功能的实现 Drag and Drop
- 用DHTML实现drag and drop的效果
- drag and drop(拖拽)
- HTML5+CSS3实现拖放(Drag and Drop)示例
- Drag-and-Drop Image Vector——拖拽Image Vector
- SWT下实现Drag and Drop(DND)学习笔记(写作中...)
- 用DHTML实现drag and drop的效果
- 让你的控件也具有拖拽(drag-and-drop)功能
- easyUI treeGrid 实现(一)---_parentId、beginEdit、cancelEdit、enableDnd....以及实现两个treeGrid拖拽
- [Selenium]计算坐标进行拖拽,重写dragAndDropOffset