想要实现这种平铺,切不拖动的情况下可以使用element ui 中的tree中自带的这个
:render-content=“renderContent” //树节点的内容区的渲染 。把最底层节点加在这里这个属性来实现
renderContent(h,{ node, data }){let className ='';if(node.level ==3){
className ='threeFuse';}return<span class={className}>{data.label}</span>},
然后再mouted中遍历当前加入的threeFuse这个dom元素,这样就可以实现了
mounted(){this.$nextTick(()=>{var threeFuse= document.getElementsByClassName('threeFuse');for(var i =0; i < threeFuse.length; i++){
threeFuse[i].parentNode.style.cssFloat ='left';
threeFuse[i].parentNode.style.styleFloat ='left';}})},
下面在说说加了拖拽效果,还要实现横向排版的布局问题,在做这个过程中我一开始也是按照上面实现了,但是有个问题,浮动,你从其他节点拖拽过去后,会在你放置的节点位置形成竖状结构,或者有时候会出现,单排超出当前盒子,导出文字看不到,然后我就想能用弹性布局吗,试了一下可以,设置display:flex flex-flow:wrap是可以实现的
this.$nextTick(()=>{var threeLeftName = document.getElementsByClassName('threeLeft');for(var j =0; j < threeLeftName.length; j++){//设置右边的样式
threeLeftName[j].parentNode.parentNode.parentNode.style.display ='flex'
threeLeftName[j].parentNode.parentNode.parentNode.style.flexFlow ='wrap'}})
但是bug就来了,当你点击tree自带的下拉箭头那个展开时就又变回原来的竖状结构了,好吧,又得看它的方法,发现有个node-expand这个方法,在里面加弹性布局样式,加了不生效,用nextTick和 forceUpdate去更新发现并没有用,然后我又用延时了一下发现可以了,但是出现了回弹问题,这个问题的引起不知道是不是过渡引起的问题,目前没时间研究了,后续有时间研究一下,现在补上出现问题的图片
nodeExpand(obj, node, event){if(node.level ==3){setTimeout(()=>{
event.$el.lastElementChild.style.display ='flex'
event.$el.lastElementChild.style.flexFlow ='wrap'})}},
最后补上解决方法
直接用样式给他写成浮动就好了,如果你是要第四层横向排版的话在加一个 .el-tree-node__children 就可以了,我这个是第三层设置的,这样的话前面也就不需要 :render-content 和 node-expand这2个方法了
/deep/.el-tree-node__children .el-tree-node__children .el-tree-node {float: left;}
版权归原作者 迷之南风 所有, 如有侵权,请联系我们删除。