layui-tree美化左侧菜单

  • html
  1. <div class="layui-side layui-bg-black">
  2. <div class="layui-side-scroll " >
  3. <div id="sidemenubar" lay-filter="test"></div>
  4. </div>
  5. </div>
  • css
  1. /*左侧导航*/
  2. .layui-tree-skin-sidebar li i{
  3. color: rgba(255,255,255,.7);
  4. display: none;
  5. }
  6. .layui-tree-skin-sidebar li a cite{
  7. color: rgba(255,255,255,.7)
  8. }
  9. .layui-tree-skin-sidebar li .layui-tree-spread{
  10. display: block;
  11. position: absolute;
  12. right: 30px;
  13. }
  14. .layui-tree-skin-sidebar li{
  15. line-height: 45px;
  16. position: relative;
  17. }
  18. .layui-tree-skin-sidebar li ul{
  19. margin-left: 0;
  20. background: rgba(0,0,0,.3);
  21. }
  22. .layui-tree-skin-sidebar li ul a{
  23. padding-left: 20px;
  24. }
  25. .layui-tree-skin-sidebar li a{
  26. height: 45px;
  27. border-left: 5px solid transparent;
  28. box-sizing: border-box;
  29. width: 100%;
  30. }
  31. .layui-tree-skin-sidebar li a:hover{
  32. background: #4E5465;
  33. color: #fff;
  34. border-left: 5px solid #009688;
  35. }
  36. .layui-tree-skin-sidebar li a.active{
  37. background: #009688;
  38. }
  • js
  1. <!--layui.js文件必须放到HTML内容的最后-->
  2. <script src="layui/layui.js"></script>
  3. layui.use(['element','layer','jquery','tree'], function(){
  4. var element = layui.element;
  5. var layer = layui.layer;
  6. var $ = layui.jquery;
  7. var menuData = [ //节点
  8. {
  9. name: '常用文件夹'
  10. ,id: '1'
  11. ,children: [
  12. {
  13. name: '所有未读'
  14. ,id: '11'
  15. ,url: 'http://www.layui.com/'
  16. }, {
  17. name: '置顶邮件'
  18. ,id: '12'
  19. }, {
  20. name: '标签邮件'
  21. ,id: '13'
  22. }
  23. ]
  24. }, {
  25. name: '我的邮箱'
  26. ,id: '2'
  27. ,children: [
  28. {
  29. name: 'QQ邮箱'
  30. ,id: '21'
  31. ,spread: true
  32. ,children: [
  33. {
  34. name: '收件箱'
  35. ,id: '211'
  36. ,children: [
  37. {
  38. name: '所有未读'
  39. ,id: '2111'
  40. }, {
  41. name: '置顶邮件'
  42. ,id: '2112'
  43. }, {
  44. name: '标签邮件'
  45. ,id: '2113'
  46. }
  47. ]
  48. }, {
  49. name: '已发出的邮件'
  50. ,id: '212'
  51. }, {
  52. name: '垃圾邮件'
  53. ,id: '213'
  54. }
  55. ]
  56. }, {
  57. name: '阿里云邮'
  58. ,id: '22'
  59. ,children: [
  60. {
  61. name: '收件箱'
  62. ,id: '221'
  63. }, {
  64. name: '已发出的邮件'
  65. ,id: '222'
  66. }, {
  67. name: '垃圾邮件'
  68. ,id: '223'
  69. }
  70. ]
  71. }
  72. ]
  73. }
  74. ]
  75. layui.tree({
  76. elem: '#sidemenubar' //传入元素选择器
  77. ,skin: 'sidebar' //自定义tree样式的类名
  78. ,nodes:menuData //节点数据
  79. ,click: function(node,item){
  80. //node即为当前点击的节点数据,item就是被点击的a标签对象了
  81. //导航按钮选中当前
  82. $('#sidemenubar a').removeClass('active');
  83. $(item).addClass('active');
  84. $(item).siblings('.layui-tree-spread').click();
  85. //添加新tab
  86. activeTab.init(node.name,node.url,node.id);
  87. }
  88. });
  89. var activeTab = {
  90. tabTit : '', //tab titile标题
  91. tabUrl : '', //tab内容嵌套iframe的src
  92. tabId : '', //tab 标签的lay-id
  93. tabCon : function(){
  94. var result;
  95. $.ajax({
  96. type: 'get',
  97. url: this.tabUrl,
  98. dataType: 'html',
  99. success: function(data){
  100. result = data;
  101. }
  102. })
  103. return result;
  104. },
  105. addTab : function(){ //新增tab项
  106. element.tabAdd('demo', {
  107. title: this.tabTit
  108. ,content: '<iframe src = '+this.tabUrl +' ></iframe>' //支持传入html
  109. ,id: this.tabId
  110. })
  111. },
  112. changeTab: function(){ //选中tab项
  113. element.tabChange('demo', this.tabId);
  114. },
  115. ishasTab : function(){ //判断tab项中是否包含
  116. var _this = this;
  117. var dataId,isflag;
  118. var arrays = $('.layui-tab-title li');
  119. $.each(arrays,function(idx,ele){
  120. dataId = $(ele).attr('lay-id');
  121. if(dataId === _this.tabId){
  122. isflag = true
  123. return false
  124. }else{
  125. isflag = false
  126. }
  127. })
  128. return isflag
  129. },
  130. init : function(tabtit,taburl,tabid){
  131. var _this = this;
  132. _this.tabUrl = taburl;
  133. _this.tabId = tabid;
  134. _this.tabTit = tabtit;
  135. if(taburl){
  136. if(!_this.ishasTab()){
  137. _this.addTab();
  138. }
  139. _this.changeTab();
  140. }else{
  141. return false
  142. }
  143. }
  144. }
  145. });

新增tab项逻辑思路

  • 点击左侧导航,获取它的数据(url,id。。。)
  • 如果有url,则判断其id是否与tab项的lay-id相同,相同则切换选中,不相同则新增

遇到的问题

layui-tree 单击节点只返回当前的节点数据,不返回当前节点的HTML对象

解决方案

  • 更改tree.js 源码

  1. e.children("a").on("click",
  2. function(e) {
  3. layui.stope(e),
  4. i.click(o,this)
  5. })
  6. i.click(o)改为 i.click(o,this)
  • 使用

结语

layui的使用刚刚开始,记录所采之坑,采坑继续进行中。。。

使用layui-tree美化左侧菜单,点击生成tab选项的更多相关文章

  1. django 权限设置 左侧菜单点击显示,面包屑

    1.左侧菜单点击显示 就是在点击的时候保留点击的功能 方法. 1.加入新的字段,pid来判断 class Permission(models.Model): """ 权限 ...

  2. Layui tree 下拉菜单树

    1.效果: 2.html  代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8" ...

  3. layui实现左侧菜单点击右侧内容区显示

    https://segmentfault.com/a/1190000014617129

  4. HTML实用案例(1)—— 左侧菜单,右侧内容的布局(带左侧菜单点击隐藏显示效果)

    效果图 代码部分 <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" ...

  5. layui菜单点击刷新,自适应

    最近在项目上用layui框架后台iframe版,遇到的一些问题分享: 1.项目的左侧菜单点击对应的子菜单能自动刷新问题. 2.除了在左侧有菜单,还需要在右侧需要一个菜单(跳转到新页面),并且能够伸缩自 ...

  6. LayUI左侧菜单无法保持选中状态

    1.问题描述:一般的左侧菜单都会是动态添加的模块,利用循环把模块名和链接地址逐个显示出来如下图 但是问题来了,只要点任何二级菜单就不会保持左侧菜单当前一级菜单和二级菜单选中状态. 2.分析原因:因为模 ...

  7. ajax实现简单的点击左侧菜单,右侧加载不同网页

    实现:ajax实现点击左侧菜单,右侧加载不同网页(在整个页面无刷新的情况下实现右侧局部刷新,用到ajax注意需要在服务器环境下运行,从HBuilder自带的服务器中打开浏览效果即可) 原理:ajax的 ...

  8. 翻遍互联网都找不到的解决方案,一行代码轻松实现 Gitbook 默认折叠左侧菜单效果

    Gitbook 是一款产品文档构建工具,也可以用于构建个人博客,默认情况下电脑端访问时左侧菜单是展开状态,可偏偏有人想要实现默认折叠效果,于是诞生了这篇文章! 善良的我选择帮助别人 可能是网上关于 G ...

  9. React+Ant Design设置左侧菜单导航路由的显示与隐藏(与权限无关)

    最近在学习react时,用到了很流行的UI框架Ant Design,也了解了一下Ant Design Pro,发现它们都有导航组件,Ant Design框架的导航菜单在这里,Ant Design Pr ...

随机推荐

  1. go语言 前言

    1什么是Go? Go是一门开源.并发支持.具有垃圾回收机制.编译性系统编程语言.在静态编译语言的高性能和动态语言的高效开发之间拥有良好平衡点.被称为21世纪的C语言.Go语言已经成为云计算.云存储时代 ...

  2. Python 接口自动化(预)

    1. HTTP协议:HTTP是接口测试的基础: 2. Fiddler工具:Fiddler所有界面布局及主要布局

  3. ES6小点心之通用弹窗

    小点心,顾名思义,开箱即食,拿来即用. 前端业务逻辑主要分为[交互效果]和[数据展示]两方面.数据展示可使用 MVVM 框架来实现.前端的交互效果常用的也就那么几种,比如弹窗,楼层定位,倒计时,下拉刷 ...

  4. 【二分图】洛谷P1640连续攻击游戏

    题目描述 lxhgww最近迷上了一款游戏,在游戏里,他拥有很多的装备,每种装备都有2个属性,这些属性的值用[1,10000]之间的数表示.当他使用某种装备时,他只能使用该装备的某一个属性.并且每种装备 ...

  5. 编写OC高质量的代码的有效方法

    1. 写这个只是为了自己记忆,有相关pdf文件,如需要留下邮箱.. 2. 在类的头文件中尽量少引入其他头文件 除非确有必要,否则不要引入头文件.一般来说,应在某个类的头文件中使用向前声明来提及别的类( ...

  6. 读汤姆大叔《JavaScript变量对象》笔记

    一段简单的JavaScript代码思考 先看一段简单的代码,打印结果是??为什么why?? 从上述打印结果不难看出,在打印基本变量num.函数表达式fn.函数声明fun时,就已经知道变量num.函数表 ...

  7. asp.net core 教程(五)-配置

    Asp.Net Core-配置 Asp.Net Core-配置 在这一章,我们将讨论 ASP.NET Core项目的相关的配置.在解决方案资源管理器中,您将看到 Startup.cs 文件.如果你有以 ...

  8. js中的稀疏数组和密集数组

    原文地址: http://www.2ality.com/2012/06/dense-arrays.html 一般来说JavaScript中的数组都是稀疏的,也就是说数组中的元素与元素之间是由空格的,因 ...

  9. VirtualBox - RTR3InitEx failed with rc=-1912 (rc=-1912)

    有一天重启电脑后虚拟机virtual box突然打不开了,提示类似 https://askubuntu.com/questions/900794/virtualbox-rtr3initex-faile ...

  10. 字典 (dict) 的增删改查及其他方法

    一.字典 1.字典简介: 字典是python中唯一的映射类型,采用键值对(key-value)的形式存储数据.python对key进行哈希函数运算,根据计算的结果决定value的存储地址,所以字典是无 ...