ztree插件中的拖拽使用

很多时候会用到树形结构来展示层级数据,有时候我们会用到拖拽效果该改变树结构中的层级数据

首先设置配置项,必须配置edit:{enable:true}即开启编辑,然后只需要拖拽时需要禁用修改删除按钮,然后根据需要配置drag配置项,比如拖拽时是复制该节点到目标节点(isCopy),还是将该节点移动到目标节点(isMove)。同级是否可以变换位置(prev,next)。如果允许将节点拖放成为目标节点子节点(inner)。

下面的配置是仅允许将拖放节点放置到目标节点里面,同级不允许修改位置。

var setting = {
    check: {
        enable: false //不需要单选框
    },
    view: {
		dblClickExpand: false // 双击不允许展开节点
	},
    data: {
        simpleData: {
            enable: true   //数据结构定义为simpleData
        }
    },
    edit: {
    	enable:true,   //拖拽必须开启edit
    	drag: {
			isCopy: false,//拖拽时, 设置是否允许复制节点
			isMove: true,//拖拽时, 设置是否允许移动节点
			prev: false, //拖拽到目标节点时,设置是否允许移动到目标节点前面的操作
			next: false,//拖拽到目标节点时,设置是否允许移动到目标节点后面的操作
			inner: true,//拖拽到目标节点时,设置是否允许成为目标节点的子节点
		},
	showRenameBtn: false,//隐藏自带的修改按钮
	showRemoveBtn: false,//隐藏自带的删除按钮
    },
    callback: {
        onClick: zTreeOnclick,//单击节点
        onDblClick: zTreeOnDblClick,//双击节点
        beforeDrag: zTreeBeforeDrag,//拖拽前
        beforeDrop: zTreeBeforeDrop,//放置前
        onDrop: zTreeOnDrop,//放置
    }
};

关于用到的回调函数一般就是:beforeDrag,beforeDrop,onDrop,ztree关于拖拽的回调很丰富,但是我们一般情况下这三个回调足够了,下面也仅介绍这三个回调函数。

beforeDrag:用于捕获节点被拖拽之前的事件回调函数,并且根据返回值确定是否允许开启拖拽操作。如果返回 false,将无法触发 onDragMove 和 onDrag 事件回调函数。

例如:一级节点不允许拖放

function zTreeBeforeDrag(treeId, treeNodes) {
	if(treeNodes[0].pId === '0'){
		//alert('一级节点不允许拖放')
		return false;
	}
};

beforeDrop:用于捕获节点拖拽操作结束之前的事件回调函数,并且根据返回值确定是否允许此拖拽操作,如未拖拽到有效位置,则不触发此回调函数,直接将节点恢复原位置

例如 禁止将节点拖拽成为根节点

function zTreeBeforeDrop(treeId, treeNodes, targetNode, moveType) {
    //禁止将节点拖拽成为根节点
    return !(targetNode == null || (moveType != "inner" && !targetNode.parentTId));
};


function zTreeBeforeDrop(treeId, treeNodes, targetNode, moveType) {
	
    //例如根据你节点的属性确定节点拖拽的规则,比如不能移动二级节点
    //比如三级节点不能放到三级节点下面,仅能放到一级或者二级
    if(treeNodes[0].treeType==='1' || targetNode.treeType==='0' ){
	   return false;
    }
    
};

onDrop:用于捕获节点拖拽操作结束的事件回调函数

重点来了,这个回调可以做很多很多事情,我们前面的几个回调函数都是在定义拖拽的条件规则,而这里就是拖拽完成所需要做的事情。例如你可以根据ztree的节点生成一个带数据的节点放置到某个div盒子中。如果是ztree中的节点拖放,你还需要将拖放结果发送给后端保存修改结果。

function zTreeOnDrop(event, treeId, treeNodes, targetNode, moveType) {
    //如果是树之间的拖放发送拖拽结果给后端
    if(targetNode){
        $.ajax()....
    }

    //如果是把节点拖放到某个区域生成一个元素
    if(event.target.className === 'zone'){
        let item = document.createElement('div');
        item.className = 'item';
        item.style.left = event.pageX + 'px';
        item.style.top = event.pageY + 'px';
        item.innerHTML = treeNodes[0].name;
        
        event.target.appendChild(item);

        //然后向后端保存数据
        $.ajax....
    }
};

上面回调函数参数说明(相同参数名值的意义是一样的):

event:标准的 js event 对象

treeId:目标节点 targetNode 所在 zTree 的treeId,即初始化ztree的id

treeNodes:被拖拽的节点 JSON 数据集合,可能是多个节点,是一个数组,数组项是每个节点的对象信息

targetNode:如果是在树中拖放是成为 treeNodes 拖拽结束的目标节点 JSON 数据对象。如果不是在树中值为null

moveType:指定移动到目标节点的相对位置,"inner":成为子节点,"prev":成为同级前一个节点,"next":成为同级后一个节点。如果 moveType = null,表明拖拽无效

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值