谷粒商城-拖拽(逻辑)
首先,在三级菜单中加入draggable,表示是否开启拖拽节点功能。
之后,加入allow-drop,表示拖拽时判定目标节点能否被放置。该方法有三个参数draggingNode(当前节点), dropNode(放到哪个节点), type(放到哪个节点的哪个位置),type参数有三种情况:'prev'、'inner' 和 'next',分别表示放置在目标节点前、插入至目标节点和放置在目标节点后。
编写allowDrop方法。
其中countNodeLevel方法是一个递归的方法,目的是为了计算出最深的子节点的深度。首先默认maxLevel为0,之后进行遍历,如果子节点的catLevel大于maxLevel,则把carLevel的值赋给maxLevel,之后把子节点当成参数进行递归。最终得到的便是最深子节点的深度maxLevel,可以理解为maxLevel相当于最深子节点的catLevel。
得到maxLevel之后,计算当前节点的层数,用maxLevel-当前节点的catLevel+1便可以得到。
最后进行判断,如果是拖拽到某一节点里,那么判定条件为当前节点层数+放到的某个节点的level需要小于等于3。如果是拖拽到某一结点的前后,则需要用当前节点层数+放到的某个节点的父节点的level需要小于等于3。