模板简介
模板使用简要说明
主题配色及保存
顶部导航对应侧边栏菜单切换
侧边栏菜单的JS初始化
点击侧边栏刷新
iframe版本右侧内容区域404问题
关于非iframe版本菜单高亮
iframe版本子页面内新建TAB
iframe中操作当前Tabs
iframe页面内的loading
多标签页(Multitabs)插件说明
关于multitabs的一些调整
调整左侧的宽度
webuploader使用时候的问题
关于模板的默认主题或者配色
关于模板的字体图标问题
关于版权和商业用途
模板中固有的插件
光年模板的loading和消息(v3)
rangeSlider滑块(v3)
bootstrap-datepicker日期(v3)
bootstrap-datepicker日期(v4)
bootstrap-datetimepicker日期时间(v3)
bootstrap-datetimepicker日期时间(v4)
perfect-scrollbar滚动条
Chart.js图表
bootstrap-colorpicker颜色选择
jquery-confirm对话框
jquery.tagsinput标签
bootstrap-notify消息(v4)
chosen.jquery关联选择
jquery.bootstrap.wizard向导
clockpicker时间选择(v4)
bootstrap-maxlength长度验证(v4)
bootstrap-select下拉选择(v4)
fullcalendar日程(v4)
bootstrap-table表格插件
插件项目包含插件
Date Range Picker时间段选择
material风格时间选择器
dropzone上传
uploadify上传
webuploader上传
H5图片上传
cropper图片裁剪
ckeditor富文本编辑器
editor.md编辑器
summernote富文本编辑器
tinymce富文本编辑器
ueditor富文本编辑器
wangeditor富文本编辑器
bootstrap-validate表单验证
jquery-validate表单验证
bootstrap-select下拉选择
bootstrap-selectN联动
bootstrap-lyear-select下拉
select2下拉
bootstrap-multiselect下拉多选
lyear-dropdowntree下拉树状
ZTree树形菜单
treeview树状插件
jstree树状结构
imgVer拼图滑块
sliderVerification滑块验证
bootstrap3-dialog模态框
layer弹窗
jquery.auto.complete自动填充
fixedheadertable固定表头
fontIconPicker图标选择
fullcalendar日程
jQuery Raty评分
lyear.loading加载
Bootstrap MaxLength长度验证
jquery.toolbar弹出式工具栏
jquery.bootstrap-touchspin输入框微调
插件项目包含示例
表单布局示例
聊天页面示例
logo处使用文字
模态框中使用Tab选项卡
模态框最大化
顶部消息示例
搜索布局
搜索布局2
搜索布局3
侧滑边栏区域
选择示例
选择示例2
选择示例3
代码演示切换
留言列表布局
数据统计布局
产品价格布局
搜索框
用户头像篇
动画篇
其他篇
另一种侧边栏菜单
侧边栏菜单的JS初始化 - 光年模板说明文档 - 笔下光年
网站首页
侧边栏菜单的JS初始化
有小伙伴提到想用js初始化左侧菜单,这里简单写了个方法。 这里以iframe版本为例。您可以将下面的代码放到 `index.min.js` 中,要放到 `;jQuery( function() {});` 外面,然后直接使用 `setSidebar(menus);`,调用时传入的参数,可以是 `json` 字符串,也可以是对象,不需要是树状结构的。 以下是主要的js代码。 > 注意:因IE浏览器不支持ES6的语法,请考虑自身的应用情况是否使用treeData方法(树状结构数据可由后端先处理完成,前端加载菜单时放在index.min.js之前)。 ```javascript /** * 菜单 * @param data 菜单JSON数据 * id 菜单唯一ID * name 菜单名称 * url 菜单链接地址 * icon 图标 * pid 父级ID * is_out 是否外链0否|1是,外链a标签没有class='multitabs' * is_home 是否首页 */ var setSidebar = function(data){ if (data.length == 0) return false; var treeObj = treeData(data, 'id', 'pid', 'children'); html = createMenu(treeObj, true); $('.sidebar-main').append(html); } var createMenu = function (data, is_frist) { var menu_body = is_frist ? '<ul class="nav nav-drawer">' : '<ul class="nav nav-subnav">'; for(var i = 0; i < data.length; i++){ iframe_class = data[i].is_out == 1 ? '' : 'class="multitabs"'; icon_div = data[i].pid == 0 ? '<i class="' + data[i].icon + '"></i>' : ''; selected = (data[i].pid == 0) && (data[i].is_home == 1) ? 'active' : ''; menuName = data[i].pid == 0 ? '<span>' + data[i].name + '</span>' : data[i].name; if (data[i].children && data[i].children.length > 0) { menu_body += '<li class="nav-item nav-item-has-subnav"><a href="javascript:void(0)">' + icon_div + menuName + '</a>'; menu_body += createMenu(data[i].children); } else { menu_body += '<li class="nav-item ' + selected + '"><a href="' + data[i].url + '" '+ iframe_class +'>' + icon_div + menuName + '</a>'; } menu_body += '</li>'; } menu_body += '</ul>'; return menu_body; }; /** * @author CSDN 蔚莱先森 * @param source json数据源 * @param id 主键ID * @param parendId 父级ID名称 * @param children 子级名称 */ var treeData = function (source, id, parentId, children){ let cloneData = (typeof source == 'object') ? source : JSON.parse(source); return cloneData.filter(father=>{ let branchArr = cloneData.filter(child => father[id] == child[parentId]); branchArr.length>0 ? father[children] = branchArr : '' return father[parentId] == 0 }) } ``` 如果你是v4的模板,请将上面的代码做一点点更改: ```javascript // v3的 var menu_body = is_frist ? '<ul class="nav nav-drawer">' : '<ul class="nav nav-subnav">'; // v4的 var menu_body = is_frist ? '<ul class="nav-drawer">' : '<ul class="nav nav-subnav">'; ``` 菜单这一块的html代码,保留如下: ```html <!--v3版本--> <div class="lyear-layout-sidebar-scroll"> <nav class="sidebar-main"></nav> </div> <!--v4版本--> <div class="lyear-layout-sidebar-info lyear-scroll"> <nav class="sidebar-main"></nav> </div> ``` 也可以将代码封装到lightyear.js中,在index.html中引入,然后像这样调用 lightyear.sidebar(menus);。 ```javascript return { // 省略... // 左侧菜单 sidebar : function(data) { setSidebar(data); } }; ``` 记得最后return里面要加上上面的代码。最后附上一段菜单的json串。 ```json [{"id":"1","name":"后台首页","url":"lyear-main.html","pid":0,"icon":"mdi mdi-home","is_out":0,"is_home":1},{"id":"2","name":"UI 元素","url":"#","pid":0,"icon":"mdi mdi-palette","is_out":0,"is_home":0},{"id":"3","name":"按钮","url":"lyear_ui_buttons.html","pid":2,"icon":"","is_out":0,"is_home":0},{"id":"4","name":"卡片","url":"lyear_ui_cards.html","pid":2,"icon":"","is_out":0,"is_home":0},{"id":"5","name":"格栅","url":"lyear_ui_grid.html","pid":2,"icon":"","is_out":0,"is_home":0},{"id":"6","name":"多级菜单","url":"#","pid":0,"icon":"mdi mdi-menu","is_out":0,"is_home":0},{"id":"7","name":"一级菜单","url":"#!","pid":6,"icon":"","is_out":0,"is_home":0},{"id":"8","name":"一级菜单","url":"#!","pid":6,"icon":"","is_out":0,"is_home":0},{"id":"9","name":"二级菜单","url":"#!","pid":8,"icon":"","is_out":0,"is_home":0},{"id":"10","name":"二级菜单","url":"#!","pid":8,"icon":"","is_out":0},{"id":"11","name":"三级菜单","url":"#!","pid":10,"icon":"","is_out":0,"is_home":0},{"id":"12","name":"三级菜单","url":"#!","pid":10,"icon":"","is_out":0,"is_home":0}] ``` 由于上面生成树状结构的方法不支持IE,附上另一个tree结构数据生成的方法: ```javascript /** * 树状的算法 * @params list 代转化数组 * @params parentId 起始节点 * @params idName 主键ID名 * @params parentIdName 父级ID名称 * @params childrenName 子级名称 * @author CSDN博主「伤包子」 */ function getTrees(list, parentId, idName, parentIdName, childrenName) { let items= {}; // 获取每个节点的直属子节点,*记住是直属,不是所有子节点 for (let i = 0; i < list.length; i++) { let key = list[i][parentIdName]; if (items[key]) { items[key].push(list[i]); } else { items[key] = []; items[key].push(list[i]); } } return formatTree(items, parentId, idName, childrenName); } /** * 利用递归格式化每个节点 */ function formatTree(items, parentId, idName, childrenName) { let result = []; if (!items[parentId]) { return result; } for (let t in items[parentId]) { items[parentId][t][childrenName] = formatTree(items, items[parentId][t][idName], idName, childrenName) result.push(items[parentId][t]); } return result; } ``` [点击查看演示示例](http://example.itshubao.com/example/114.html "点击查看演示示例")
上一篇:
顶部导航对应侧边栏菜单切换
下一篇:
点击侧边栏刷新