vue组件横向树实现代码


Posted in Javascript onAugust 02, 2018

将之前的用css3+jq实现的横向树样式简单封装成组件使用到vue项目中,文件名为transverseTree.vue

代码:

<template>
 <div class="tree">
  <ul v-if="treeData && treeData.length">
   <li v-for="(column,index) in treeData">
    <span class="root">{{column.name}}</span>
    <ul v-if="column.children && column.children.length">
     <li v-for="(childrenColumn,index) in column.children">
      <span>{{childrenColumn.name}}</span>
      <ul v-if="childrenColumn.children && childrenColumn.children.length">
       <li v-for="(grandChildrenColumn,index) in childrenColumn.children">
        <span>{{grandChildrenColumn.name}}</span>
       </li>
      </ul>
     </li>
    </ul>
   </li>
  </ul>
 </div>
</template>
<script>
 export default {
 name: 'transverseTree',
 props: {
  treeData:{
   type:Array,
   default:[]
  }
 },
 methods: {
  editDom(){
   if($('.root').siblings('ul').children('li').length==1){
    let num = 26*($('.root').siblings('ul').children('li').find('li').length-1);
    $('.root').css({ 'top': num });
    $('.root').siblings('ul').children('li').css({ 'top': num });
    $('.root').siblings('ul').find('ul').css({ 'top': -num });
    if($('.root').siblings('ul').find('li').length > 1){
     $('.root').siblings('ul').children('li').children('span').addClass('hasChild');
    }
   }else{
    $('.root').css({ 'top': 26 * ($('.root').siblings('ul').children('li').length - 1) });
   }
  }
 },
 mounted() {
  this.$nextTick(()=>{
   this.editDom();
  });
 }
 };
</script>
<style scope>
.tree{
 position: relative;
 margin: -16px -16px 0;
 min-height: 400px;
 padding-left: 11px;
 overflow: auto;
}
.tree ul{
 width: 210px;
 height: 100%;
 position: absolute;
}
.tree ul ul{
 left: 226px;
 top: 0;
}
.tree li{
 float: left;
 list-style-type: none;
 position: relative;
 padding: 16px 5px 0 5px;
}
.tree li span{
 position: relative;
 display: inline-block;
 width: 200px;
 height: 36px;
 background: #F0F0F5;
 border-radius: 4px;
 text-decoration: none;
 color: #2D2D2D;
 font-size: 14px;
 line-height: 36px;
 text-align: center;
}
.tree li::before{
 box-sizing:inherit;
 content: '';
 position: absolute;
 top: 33px;
 left: -7px;
 border-top: 2px solid #D2D2D7;
 width: 12px;
}
.tree li::after{
 box-sizing:inherit;
 content: '';
 position: absolute;
 top: 8px;
 left: -9px;
 height: 100%;
 border-left: 2px solid #D2D2D7;
}
.tree li:first-child::after{
 height: 51%;
 border-left: 2px solid #D2D2D7;
 border-top: 2px solid #D2D2D7;
 top: 33px;
 width: 1px;
 border-top-left-radius: 4px;
}
.tree li:last-child::after{
 height: 25px;
 border-left: 2px solid #D2D2D7;
 border-bottom: 2px solid #D2D2D7;
 top: 8px;
 width: 1px;
 border-bottom-left-radius: 4px;
}
.tree li:only-child::after,
.tree li:only-child::before{
 display: none;
}
.tree ul ul li:only-child::before{
 display: inline-block;
}
.tree ul ul li:only-child span::before{
 display: inline-block;
}
.tree li:only-child span.root::before,.tree li:only-child span.hasChild::before{
 content: '';
 position: absolute;
 top: 17px;
 right: -14px;
 border-top: 2px solid #D2D2D7;
 width: 14px;
}
.tree ul ul ul li:only-child span::before{
 content: '';
 position: absolute;
 top: 17px;
 left: -26px;
 border-top: 2px solid #D2D2D7;
 width: 26px;
}
</style>

在父组件中使用import引入该组件:

import transverseTree from './transverseTree'

注册组件:

components: { ifbpInfolistCard,transverseTree },

在template中使用:

<transverse-tree :treeData='treeData'></transverse-tree>

其中,treeData为一个数组,在data中给treeData一个初始值:

treeData: [
{name:'报表名称1',
children:[
{name:'功能名称1',
children:[
{name:'磁贴名称1'}
]},
{name:'功能名称2',
children:[
{name:'磁贴名称1'}
]},
{name:'功能名称3',
children:[
{name:'磁贴名称1'}
]},
]}
]

实现效果:

vue组件横向树实现代码

vue组件横向树实现代码

ps:需要特别说明的是,我目前的代码暂时只支持这两种样式,即:

1父节点-1子节点-1/多孙节点,或是1父节点-多子节点-1孙节点,样式是通过jq去判断修改的,以后有时间的话再去研究优化争取可复用性强一些。希望对大家能有所帮助。

总结

以上所述是小编给大家介绍的vue组件横向树实现代码,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
JQuery+JS实现仿百度搜索结果中关键字变色效果
Aug 02 Javascript
JavaScript打开word文档的实现代码(c#)
Apr 16 Javascript
jQuery Ajax异步处理Json数据详解
Nov 05 Javascript
js实现幻灯片播放图片示例代码
Nov 07 Javascript
JavaScript中for..in循环陷阱介绍
Nov 12 Javascript
node.js中的fs.link方法使用说明
Dec 15 Javascript
JS实现动态生成表格并提交表格数据向后端
Nov 25 Javascript
AngularJS动态生成div的ID源码解析
Aug 29 Javascript
VueJs监听window.resize方法示例
Jan 17 Javascript
生产制造追溯系统之在线打印功能
Jun 03 Javascript
vue组件 keep-alive 和 transition 使用详解
Oct 11 Javascript
vue动态渲染svg、添加点击事件的实现
Mar 13 Javascript
利用Node.js批量抓取高清妹子图片实例教程
Aug 02 #Javascript
在微信小程序里使用watch和computed的方法
Aug 02 #Javascript
在小程序中使用Echart图表的示例代码
Aug 02 #Javascript
node.js读取Excel数据(下载图片)的方法示例
Aug 02 #Javascript
Vue-cli配置打包文件本地使用的教程图解
Aug 02 #Javascript
详解使用VueJS开发项目中的兼容问题
Aug 02 #Javascript
重新认识vue之事件阻止冒泡的实现
Aug 02 #Javascript
You might like
PHP+FLASH实现上传文件进度条相关文件 下载
2007/07/21 PHP
php 输出json及显示json中的中文汉字详解及实例
2016/11/09 PHP
PHP正则验证字符串是否为数字的两种方法并附常用正则
2019/02/27 PHP
获取DOM对象的几种扩展及简写
2006/10/09 Javascript
jquery获取input表单值的代码
2010/04/19 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
纯javascript实现分页(两种方法)
2015/08/26 Javascript
JS限制条件补全问题实例分析
2016/12/16 Javascript
vue日期组件 支持vue1.0和2.0
2017/01/09 Javascript
详解webpack 配合babel 将es6转成es5 超简单实例
2017/05/02 Javascript
浅析vue给不同环境配置不同打包命令
2018/08/17 Javascript
vue 监听某个div垂直滚动条下拉到底部的方法
2018/09/15 Javascript
深入探讨JavaScript的最基本部分之执行上下文
2019/02/12 Javascript
浅谈Three.js截图并下载的大坑
2019/11/01 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
Python基于贪心算法解决背包问题示例
2017/11/27 Python
python快排算法详解
2019/03/04 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
Python tkinter实现简单加法计算器代码实例
2020/05/13 Python
keras.layer.input()用法说明
2020/06/16 Python
CSS3属性box-shadow使用详细教程
2012/01/21 HTML / CSS
浅析border-radius如何兼容IE
2016/04/19 HTML / CSS
Hotels.com台湾:饭店订房网
2017/09/06 全球购物
皮姆斯勒语言学习:Pimsleur Language Programs
2018/06/30 全球购物
Godiva巧克力英国官网:比利时歌帝梵巧克力
2018/08/28 全球购物
Weblogc domain问题
2014/01/27 面试题
Order by的几种用法
2013/06/16 面试题
英语自我评价范文
2014/01/24 职场文书
计算机应届毕业生自荐信范文
2014/02/23 职场文书
现金出纳岗位职责
2014/03/15 职场文书
中国梦演讲稿3分钟
2014/08/19 职场文书
励志演讲稿200字
2014/08/21 职场文书
中秋节国旗下演讲稿
2014/09/05 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
奖金申请报告模板
2015/05/15 职场文书
如何在C++中调用Python
2021/05/21 Python