前两天改了一个bug ,是关于zTree的,由于之前没用过,所以查询了很多资料,摸索了很久
文档说明:
selectNode 后,(默认)表示选中节点时,会让节点自动滚到到可视区域内
问题:
由于我的树是动态加入的,先addNode再selectNode。导致选中节点的时候导航树还在预加载,所以没滚动到可视区域。
解决方案:
1、treeObi.refresh() 在selectNode前直接刷新整棵树,但是不推荐使用
2、用动画滚动 $(".navigationTree").animate({scrollTop : top - "90" + "px" || 0}, "fast");
3、在addNodes前,将加上去的子节点排序,把选中的子节点放在第一位,就能在视线范围内
第三点后面经过测试,会有bug,如果当前选中的节点在最下方,则会被遮挡
最终选中的方案:
_this.treeObj.addNodes(parentNode, childs, true);
const selectNode = _this.treeObj.getNodeByParam("id", currentModelTreeNode.id);
_this.treeObj.selectNode(selectNode);
addNodes 的第三个参数设为true ,则不会添加时自动展开节点,在selectNode时,再去选中节点并展开,此时就存在节点了
若selectNode没自动展开节点,则可以在selectNode前,调用展开方法,手动展开 _this.treeObj.expandNode(selectNode, true, true, true);