treegrid-dnd.js
(function($){
$.extend($.fn.treegrid.defaults, {
onBeforeDrag: function(row){}, // return false to deny drag
onStartDrag: function(row){},
onStopDrag: function(row){},
onDragEnter: function(targetRow, sourceRow){}, // return false to deny drop
onDragOver: function(targetRow, sourceRow){}, // return false to deny drop
onDragLeave: function(targetRow, sourceRow){},
onBeforeDrop: function(targetRow, sourceRow, point){},
onDrop: function(targetRow, sourceRow, point){} // point:'append','top','bottom'
});
$.extend($.fn.treegrid.methods, {
disableDnd:function(jq,id){
return jq.each(function() {
var target = this;
var state = $.data(this, 'treegrid');
state.disabledNodes = [];
var t = $(this);
var opts = state.options;
if (id) {
var nodes = opts.finder.getTr(target, id);
var rows = t.treegrid('getChildren', id);
for (var i = 0; i < rows.length; i++) {
nodes = nodes.add(opts.finder.getTr(target, rows[i][opts.idField]));
}
} else {
var nodes = t.treegrid('getPanel').find('tr[node-id]');
}
nodes.draggable({
disabled: true,
revert: true,
cursor: 'pointer'});
});
}
});
$.extend($.fn.treegrid.methods, {
enableDnd: function(jq, id){
if (!$('#treegrid-dnd-style').length){
$('head').append(
'<style id="treegrid-dnd-style">' +
'.treegrid-row-top td{border-top:1px solid red}' +
'.treegrid-row-bottom td{border-bottom:1px solid red}' +
'.treegrid-row-append .tree-title{border:1px solid red}' +
'</style>'
);
}
return jq.each(function(){
var target = this;
var state = $.data(this, 'treegrid');
state.disabledNodes = [];
var t = $(this);
var opts = state.options;
if (id){
var nodes = opts.finder.getTr(target, id);
var rows = t.treegrid('getChildren', id);
for(var i=0; i<rows.length; i++){
nodes = nodes.add(opts.finder.getTr(target, rows[i][opts.idField]));
}
} else {
var nodes = t.treegrid('getPanel').find('tr[node-id]');
}
nodes.draggable({
disabled:false,
revert:true,
cursor:'pointer',
proxy: function(source){
var row = t.treegrid('find', $(source).attr('node-id'));
var p = $('<div class="tree-node-proxy"></div>').appendTo('body');
p.html('<span class="tree-dnd-icon tree-dnd-no"> </span>'+row[opts.treeField]);
p.hide();
return p;
},
deltaX: 15,
deltaY: 15,
onBeforeDrag:function(e){
if (opts.onBeforeDrag.call(target, getRow(this)) == false){return false}
if ($(e.target).hasClass('tree-hit') || $(e.target).parent().hasClass('datagrid-cell-check')){return false;}
if (e.which != 1){return false;}
$(this).next('tr.treegrid-tr-tree').find('tr[node-id]').droppable({accept:'no-accept'});
// var tr = opts.finder.getTr(target, $(this).attr('node-id'));
// var treeTitle = tr.find('span.tree-title');
// e.data.startX = treeTitle.offset().left;
// e.data.startY = treeTitle.offset().top;
// e.data.offsetWidth = 0;
// e.data.offsetHeight = 0;
},
onStartDrag:function(){
$(this).draggable('proxy').css({
left:-10000,
top:-10000
});
var row = getRow(this);
opts.onStartDrag.call(target, row);
state.draggingNodeId = row[opts.idField];
},
onDrag:function(e){
var x1=e.pageX,y1=e.pageY,x2=e.data.startX,y2=e.data.startY;
var d = Math.sqrt((x1-x2)*(x1-x2)+(y1-y2)*(y1-y2));
if (d>3){ // when drag a little distance, show the proxy object
$(this).draggable('proxy').show();
var tr = opts.finder.getTr(target, $(this).attr('node-id'));
var treeTitle = tr.find('span.tree-title');
e.data.startX = treeTitle.offset().left;
e.data.startY = treeTitle.offset().top;
e.data.offsetWidth = 0;
e.data.offsetHeight = 0;
}
this.pageY = e.pageY;
},
onStopDrag:function(){
$(this).next('tr.treegrid-tr-tree').find('tr[node-id]').droppable({accept:'tr[node-id]'});
for(var i=0; i<state.disabledNodes.length; i++){
var tr = opts.finder.getTr(target, state.disabledNodes[i]);
tr.droppable('enable');
}
state.disabledNodes = [];
var row = t.treegrid('find', state.draggingNodeId);
opts.onStopDrag.call(target, row);
}
}).droppable({
accept:'tr[node-id]',
onDragEnter: function(e, source){
if (opts.onDragEnter.call(target, getRow(this), getRow(source)) == false){
allowDrop(source, false);
var tr = opts.finder.getTr(target, $(this).attr('node-id'));
tr.removeClass('treegrid-row-append treegrid-row-top treegrid-row-bottom');
tr.droppable('disable');
state.disabledNodes.push($(this).attr('node-id'));
}
},
onDragOver:function(e,source){
var nodeId = $(this).attr('node-id');
if ($.inArray(nodeId, state.disabledNodes) >= 0){return}
var pageY = source.pageY;
var top = $(this).offset().top;
var bottom = top + $(this).outerHeight();
allowDrop(source, true);
var tr = opts.finder.getTr(target, nodeId);
tr.removeClass('treegrid-row-append treegrid-row-top treegrid-row-bottom');
if (pageY > top + (bottom - top) / 2){
if (bottom - pageY < 5){
tr.addClass('treegrid-row-bottom');
} else {
tr.addClass('treegrid-row-append');
}
} else {
if (pageY - top < 5){
tr.addClass('treegrid-row-top');
} else {
tr.addClass('treegrid-row-append');
}
}
if (opts.onDragOver.call(target, getRow(this), getRow(source)) == false){
allowDrop(source, false);
tr.removeClass('treegrid-row-append treegrid-row-top treegrid-row-bottom');
tr.droppable('disable');
state.disabledNodes.push(nodeId);
}
},
onDragLeave:function(e,source){
allowDrop(source, false);
var tr = opts.finder.getTr(target, $(this).attr('node-id'));
tr.removeClass('treegrid-row-append treegrid-row-top treegrid-row-bottom');
opts.onDragLeave.call(target, getRow(this), getRow(source));
},
onDrop:function(e,source){
var dest = this;
var action, point;
var tr = opts.finder.getTr(target, $(this).attr('node-id'));
if (tr.hasClass('treegrid-row-append')){
action = append;
point = 'append';
} else {
action = insert;
point = tr.hasClass('treegrid-row-top') ? 'top' : 'bottom';
}
var dRow = getRow(this);
var sRow = getRow(source);
if (opts.onBeforeDrop.call(target, dRow, sRow, point) == false){
tr.removeClass('treegrid-row-append treegrid-row-top treegrid-row-bottom');
return;
}
action(sRow, dRow, point);
tr.removeClass('treegrid-row-append treegrid-row-top treegrid-row-bottom');
}
});
function allowDrop(source, allowed){
var icon = $(source).draggable('proxy').find('span.tree-dnd-icon');
icon.removeClass('tree-dnd-yes tree-dnd-no').addClass(allowed ? 'tree-dnd-yes' : 'tree-dnd-no');
}
function getRow(tr){
var nodeId = $(tr).attr('node-id');
return t.treegrid('find', nodeId);
}
function append(sRow, dRow){
doAppend();
if (dRow.state == 'closed'){
t.treegrid('expand', dRow[opts.idField]);
}
function doAppend(){
var data = t.treegrid('pop', sRow[opts.idField]);
t.treegrid('append', {
parent: dRow[opts.idField],
data: [data]
});
opts.onDrop.call(target, dRow, data, 'append');
}
}
function insert(sRow, dRow, point){
var param = {};
if (point == 'top'){
param.before = dRow[opts.idField];
} else {
param.after = dRow[opts.idField];
}
var data = t.treegrid('pop', sRow[opts.idField]);
param.data = data;
t.treegrid('insert', param);
opts.onDrop.call(target, dRow, data, point);
}
});
}
});
})(jQuery);
treegrid-dnd.js的更多相关文章
- EasyUi TreeGrid封装
礼物一:树型实体的抽象与封装 所谓树型实体,就是具有树型结构关系的实体,比如省.市.区.对于初学者,可能会创建三张表进行存储,有经验的开发者通过引入ParentId将设计简化为一张表,但是基于Pare ...
- RDIFramework.NET框架Web中datagrid与treegrid控件自动生成右键菜单与列标题右键菜单
在实际应用中常可以看到数据展示控件有右键菜单的功能,对应的列标题也可以右键弹出快捷菜单设置指定列的显示与隐藏等功能.在我们的RDIFramework.NET Web框架中,只要是使用了EasyUI的D ...
- html或者jsp页面引用jar包中的js文件
一,页面上引用jar包中的js文件的方法 使用java web框架AppFuse的时候发现,jquery.bootstrap等js框架都封装到jar包里面了.这些js文件通过一个wro4j的工具对其进 ...
- easyloader.js源代码分析
http://www.cnblogs.com/jasonoiu/p/easyloader_source_code_analysis.html Jquery easyui是一个javascript UI ...
- treegrid.bootstrap使用说明
treegrid.bootstrap使用说明 这个插件是用来做有层次的表格的,大概如图: 官网 http://maxazan.github.io/jquery-treegrid/ 使用这个控件之前需 ...
- JS组件系列——自己动手封装bootstrap-treegrid组件
前言:最近产品需要设计一套相对完整的组织架构的解决方案,由于组织架构涉及到层级关系,在表格里面展示层级关系,自然就要用到所谓的treegrid.可惜的是,一些轻量级的表格组件本身并没有自带树形表格的功 ...
- treegrid 表格树
treegrid 实现表格树的结构 效果图: 第一步:页面布局 <div class="col-sm-12 select-table table-striped" styl ...
- Bootstrap treegrid 实现树形表格结构
前言 :最近的项目中需要实现树形表格功能,由于前端框架用的是bootstrap,但是bootstrapTable没有这个功能所以就找了一个前端的treegrid第三方组件进行了封装.现在把这个封装的组 ...
- 学习日记3、投机取巧使两个表的数据同时在一个treeGrid中显示
不多说了直接上代码, $('#List').treegrid({ url: '@Url.Action("GetList")', width: $(window).width() - ...
- 五、bootstrap-Table Treegrid
一.bootstrap-Table Treegrid <!DOCTYPE HTML> <html lang="zh-cn"> <head> &l ...
随机推荐
- .NET反编译之manager,base.AutoScaleMode修复
使用反编译软件导出项目时,出现警告:设计器无法处理第X 行的代码:this.AutoScaleMode = AutoScaleMode.Font;方法"InitializeComponent ...
- Cocos2d-x -- 如何让背景从上到下滚动
1. 首先,声明一个2个大小的sprite数组 class GameScreen : public cocos2d::Layer { public: ... cocos2d::Sprite *back ...
- 华为P6-C00电信版,刷机总是失败? FAIL
关于这个刷机失败的问题,我只想说一点: 华为P6-C00电信版刷机时,不是任意版本都可以刷到任意版本的.我只往上刷过,那就是华为的升级文档中有说明:“只有以下版本才可以升级到此版本”. 如果你的手机的 ...
- JQMobile引入外部CSS,JS文件
使用CDN <!DOCTYPE html> <html> <head> <title>html5</title> <meta name ...
- Python 遍历set
遍历set 由于 set 也是一个集合,所以,遍历 set 和遍历 list 类似,都可以通过 for 循环实现. 直接使用 for 循环可以遍历 set 的元素: weekdays = set([' ...
- 表达式树ExpressionTree
表达式树基础 转载需注明出处:http://www.cnblogs.com/tianfan/ 刚接触LINQ的人往往觉得表达式树很不容易理解.通过这篇文章我希望大家看到它其实并不像想象中那么难.您只要 ...
- UVA1614(贪心)
Hell on the Markets Time Limit:3000MS Memory Limit:Unknown 64bit IO Format:%lld & %llu [Subm ...
- 如何配置 Oracle VirtualBox 中的客户机与物理机网络
当你在 Oracle VirtualBox 虚拟机软件 中安装了各种操作系统时,你可能需要实现物理机与虚拟机之间的相互访问. 在这篇文章中,我们将会以最简单明了的方式来说明如何配置客户机与 Linux ...
- 将web容器置于OSGi框架下进行web应用的开发
将web容器置于OSGi框架下,其实就是将web容器做成OSGi支持的Bundle,再安装到OSGi框架中,这里使用的是Jetty容器. 1.创建一个Eclipse插件项目,在此插件下创建一个WebR ...
- 逻辑回归的相关问题及java实现
本讲主要说下逻辑回归的相关问题和详细的实现方法 1. 什么是逻辑回归 逻辑回归是线性回归的一种,那么什么是回归,什么是线性回归 回归指的是公式已知,对公式中的未知參数进行预计,注意公式必须是已知的,否 ...