点击菜单选项,右侧主体区新增子界面(Tab)的实现
今天是2019年小年后一天,还有三天回家过年。
今天记录一下一种前端页面的效果的实现,这种效果很常见,一般用于网站后台系统的前端页面。一般后台系统会分为顶部导航栏,左边的菜单栏和右边的主体区。有一种效果是这样的,当点击左边菜单的时候,在右边的主体区会弹出相应的页面,点击多个菜单选项时,在右边依次陈列这些窗口,这些窗口之间可以相互切换,类似于浏览器的多个打开的窗口那样。
下面,先给出这种效果的图片:
然后我将详细记录实现这个效果的过程。
整体思路:
1.基础知识
这种效果的实现主要依赖于layui,layui里有一个示例如下:
该示例中,新增Tab项,删除Tab项和切换Tab 这三个功能的实现代码如下:
//触发事件var active ={tabAdd:function(){//新增一个Tab项element.tabAdd('demo', {title:'新选项'+ (Math.random()*1000|0) //用于演示,content: '内容'+ (Math.random()*1000|0),id:new Date().getTime() //实际使用一般是规定好的id,这里以时间戳模拟下 })},tabDelete:function(othis){//删除指定Tab项element.tabDelete('demo', '44'); //删除:“商品管理othis.addClass('layui-btn-disabled');},tabChange:function(){//切换到指定Tab项element.tabChange('demo', '22'); //切换到:用户管理 }};
以上是js部分的部分代码,完整代码请访问layui官网查看,下面对这部分代码进行简单的说明:
这部分代码核心的是这三个方法:
(1)element.tabAdd :
element.tabAdd('参数一',{title:'标题',//也就是打开的新窗口的顶部的文字,如上图所示的我的桌面content: '新增界面里的内容' ,//这里可放一个iframe,一边把外部页面引入到这里,id:id //一个数字,是每个打开的界面的唯一标识符 })
上面的代码详细详细写了每个参数的意思和用途,参数一 是一个类似于 id 的标签上的属性值,在layui中这个属性为 lay-filter="参数一" ,执行上面的方法新增的窗口会被放置在 一个属性 lay-filter="参数一"的div中。
(2)element.tabDelete('参数一', '参数二')
element.tabDelete('demo', '44');
这很容易理解,参数一是 div的lay-filter属性值,参数二是某个窗口的id.点击关闭该id的窗口。
(3)element.tabChange('参数一', '参数二')
同(2),参数一是 div的lay-filter属性值,参数二是某个窗口的id.点击切换到该id的窗口。
2.核心实现
在上面三个方法的基础上,使用js向每个方法传递一些可变的参数,就可以实现执行方法,新建/删除/切换窗口的操作。如下面一段代码所示:
tabAdd:function(title,url,id){element.tabAdd('mainTab',{title: title,//content: '<iframe tab-id="'+id+'" frameborder="0" src="'+url+'" scrolling="yes" class="x-iframe"></iframe>',id: id//实际使用一般是规定好的id,这里以时间戳模拟下 })}
在方法中传入 title,url和id.
具体实现
下面是具体实现步骤:
(1)搭一个整体页面的框架 :
如上图所示,首先搭一个这样的页面框架,这个可以直接从layui官网获取,获取戳这里:https://www.layui.com/doc/element/layout.html#admin。
因为本片目的是演示点击菜单,新增窗口的功能,所以,我尽可能的对界面的设计简化,左边菜单,去掉了二级及三级菜单:
下面给出我的html代码:
<!DOCTYPE html> <html><head><metacharset="utf-8"><title>layui</title><metaname="renderer"content="webkit"><metahttp-equiv="X-UA-Compatible"content="IE=edge,chrome=1"><metaname="viewport"content="width=device-width, initial-scale=1, maximum-scale=1"><scripttype="text/javascript"src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script><linkrel="stylesheet"href="layui-v2.3.0/layui/css/layui.css"media="all"> <scripttype="text/javascript"src="layui-v2.3.0/layui/layui.js"></script><styletype="text/css">.x-iframe{width:100%;height:100%;}.layui-tab-item{width:100%;height:100%;}</style></head><bodyclass="layui-layout-body"><divclass="layui-layout layui-layout-admin"><divclass="layui-bg-black layui-header"> <divclass="layui-logo">layui 后台布局</div><ulclass="layui-nav layui-layout-left"><liclass="layui-nav-item"><ahref="">导航一</a></li><liclass="layui-nav-item layui-this"><ahref="javascript:;">导航二</a><dlclass="layui-nav-child"><dd><ahref="" >选项1</a></dd><dd><ahref="" >选项2</a></dd><dd><ahref="" >选项3</a></dd></dl></li><liclass="layui-nav-item"><ahref="">导航三</a></li><liclass="layui-nav-item"><ahref="javascript:;">导航四</a><dlclass="layui-nav-child"><dd><ahref="">选项一</a></dd><dd><ahref="">选项二</a></dd><dd><ahref="">选项三</a></dd><ddclass="layui-this"><ahref="">选项四</a></dd> </dl></li><liclass="layui-nav-item"><ahref="">社区</a></li></ul><ulclass="layui-nav layui-layout-right"><liclass="layui-nav-item"><ahref="">控制台<spanclass="layui-badge">9</span></a></li><liclass="layui-nav-item"><ahref="">个人中心<spanclass="layui-badge-dot"></span></a></li><liclass="layui-nav-item"lay-unselect=""><ahref="javascript:;"><imgsrc="//t.cn/RCzsdCq"class="layui-nav-img">我</a><dlclass="layui-nav-child"><dd><ahref="javascript:;">修改信息</a></dd><dd><ahref="javascript:;">安全管理</a></dd><dd><ahref="javascript:;">退了</a></dd></dl></li></ul> </div><divclass="layui-side layui-bg-black"><divclass="layui-side-scroll"><!--左侧导航区域(可配合layui已有的垂直导航)--><ulclass="layui-nav layui-nav-tree"lay-filter="test"><liclass="layui-nav-item"><a_href="./index.html"><cite>列表一</cite></a></li> <liclass="layui-nav-item"><a_href="./Home.html"><cite>列表二</cite></a></li><liclass="layui-nav-item"><a_href="./login.html"><cite>列表三</cite></a></li><liclass="layui-nav-item"><a_href="./test_1.html"><cite>列表四</cite></a></li> <liclass="layui-nav-item"><a_href="./formCheck.html"><cite>列表五</cite></a></li><liclass="layui-nav-item"><a_href="./栅格.html"><cite>列表六</cite></a></li></ul></div></div><divclass="layui-body"><!--内容主体区域--><divclass="layui-tab tab"lay-filter="mainTab"lay-allowclose="false"style="height: 100%;"><ulclass="layui-tab-title"><liclass="home"><iclass="layui-icon"></i>我的桌面</li></ul><divclass="layui-tab-content"style="height: 100%;"><divclass="layui-tab-item layui-show"style="height: 100%;"><iframesrc='./Home.html'frameborder="0"scrolling="yes"class="x-iframe"></iframe></div></div></div></div><divclass="layui-footer"><!--底部固定区域-->© layui.com - 底部固定区域</div></div></body> </html>
以上代码可直接复制使用,需要注意,该引用的外部文件不要遗漏。
上面代码,主要看一下 内容主体区域 部分:
<divclass="layui-body"><!--内容主体区域--><divclass="layui-tab tab"lay-filter="mainTab"lay-allowclose="false"style="height: 100%;"> <ulclass="layui-tab-title"><liclass="home"><iclass="layui-icon"></i>我的桌面</li></ul><divclass="layui-tab-content"style="height: 100%;"><divclass="layui-tab-item layui-show"style="height: 100%;"><iframesrc='./Home.html'frameborder="0"scrolling="yes"class="x-iframe"></iframe></div></div></div> </div>
在主体区的div上添加 lay-filter="mainTab" 的属性,设置新增窗口的显示位置。其他的按照以上代码去做即可。
(2)js实现具体的效果
首先,layui的js依赖项和Jquery库引入不要忘了;
然后,添加layui js使用如下代码:
layui.use('element', function(){var element =layui.element;//下文中的代码写在此处})
接着,定义对Tab操作的方法:
//点击新增子页面var tab ={tabAdd:function(title,url,id){element.tabAdd('mainTab',{title: title,content: '<iframe tab-id="'+id+'" frameborder="0" src="'+url+'" scrolling="yes" class="x-iframe"></iframe>',id: id })},tabDelete:function(othis){element.tabDelete('mainTab',id);othis.addClass('layui-btn-disabled');},tabChange:function(id){//切换到指定Tab项element.tabChange('mainTab', id); //切换到:用户管理 }};
经过上文的介绍,这部分代码应当不难看懂,不再赘述。
最后,为每个菜单选项绑定点击事件:
$(".layui-nav-tree li").click(function(event){var url = $(this).children('a').attr('_href');var title = $(this).find('cite').html();var index = $('.layui-nav-tree li').index($(this));//遍历打开的窗口,如果当前点击的选项已经打开,则跳转到对应窗口去,不再执行for外面的两条语句创建新窗口for (var i = 0; i <$('.x-iframe').length; i++) {if($('.x-iframe').eq(i).attr('tab-id')==index+1){tab.tabChange(index+1);event.stopPropagation();return;}};tab.tabAdd(title,url,index+1);tab.tabChange(index+1);});
需要注意的是,在选项的a标签上,不要使用href来声明链接,否则会跳转出去其他页面,可以写为 _href ,在js中可根据属性获得其链接值。
做完以上这些后,就可以实现文初的效果啦,该示例的完整代码,我贴在下面,同时给出云盘链接,希望对你有帮助。
快要过年了,祝大家新年愉快!
<!DOCTYPE html> <html><head><metacharset="utf-8"><title>layui</title><metaname="renderer"content="webkit"><metahttp-equiv="X-UA-Compatible"content="IE=edge,chrome=1"><metaname="viewport"content="width=device-width, initial-scale=1, maximum-scale=1"><scripttype="text/javascript"src="https://cdn.bootcss.com/jquery/3.2.1/jquery.min.js"></script><linkrel="stylesheet"href="layui-v2.3.0/layui/css/layui.css"media="all"> <scripttype="text/javascript"src="layui-v2.3.0/layui/layui.js"></script><styletype="text/css">.x-iframe{width:100%;height:100%;}.layui-tab-item{width:100%;height:100%;}</style></head><bodyclass="layui-layout-body"><divclass="layui-layout layui-layout-admin"><divclass="layui-bg-black layui-header"> <divclass="layui-logo">layui 后台布局</div><ulclass="layui-nav layui-layout-left"><liclass="layui-nav-item"><ahref="">导航一</a></li><liclass="layui-nav-item layui-this"><ahref="javascript:;">导航二</a><dlclass="layui-nav-child"><dd><ahref="" >选项1</a></dd><dd><ahref="" >选项2</a></dd><dd><ahref="" >选项3</a></dd></dl></li><liclass="layui-nav-item"><ahref="">导航三</a></li><liclass="layui-nav-item"><ahref="javascript:;">导航四</a><dlclass="layui-nav-child"><dd><ahref="">选项一</a></dd><dd><ahref="">选项二</a></dd><dd><ahref="">选项三</a></dd><ddclass="layui-this"><ahref="">选项四</a></dd> </dl></li><liclass="layui-nav-item"><ahref="">社区</a></li></ul><ulclass="layui-nav layui-layout-right"><liclass="layui-nav-item"><ahref="">控制台<spanclass="layui-badge">9</span></a></li><liclass="layui-nav-item"><ahref="">个人中心<spanclass="layui-badge-dot"></span></a></li><liclass="layui-nav-item"lay-unselect=""><ahref="javascript:;"><imgsrc="//t.cn/RCzsdCq"class="layui-nav-img">我</a><dlclass="layui-nav-child"><dd><ahref="javascript:;">修改信息</a></dd><dd><ahref="javascript:;">安全管理</a></dd><dd><ahref="javascript:;">退了</a></dd></dl></li></ul> </div><divclass="layui-side layui-bg-black"><divclass="layui-side-scroll"><!--左侧导航区域(可配合layui已有的垂直导航)--><ulclass="layui-nav layui-nav-tree"lay-filter="test"><liclass="layui-nav-item"><a_href="./index.html"><cite>列表一</cite></a></li> <liclass="layui-nav-item"><a_href="./Home.html"><cite>列表二</cite></a></li><liclass="layui-nav-item"><a_href="./login.html"><cite>列表三</cite></a></li><liclass="layui-nav-item"><a_href="./test_1.html"><cite>列表四</cite></a></li> <liclass="layui-nav-item"><a_href="./formCheck.html"><cite>列表五</cite></a></li><liclass="layui-nav-item"><a_href="./栅格.html"><cite>列表六</cite></a></li></ul></div></div><divclass="layui-body"><!--内容主体区域--><divclass="layui-tab tab"lay-filter="mainTab"lay-allowclose="false"style="height: 100%;"><ulclass="layui-tab-title"><liclass="home"><iclass="layui-icon"></i>我的桌面</li></ul><divclass="layui-tab-content"style="height: 100%;"><divclass="layui-tab-item layui-show"style="height: 100%;"><iframesrc='./Home.html'frameborder="0"scrolling="yes"class="x-iframe"></iframe></div></div></div></div><divclass="layui-footer"><!--底部固定区域-->© layui.com - 底部固定区域</div></div></body> </html><scripttype="text/javascript">$(function(){//JavaScript代码区域 layui.use('element',function(){varelement=layui.element;$(".layui-nav-tree li").click(function(event){varurl=$(this).children('a').attr('_href');vartitle=$(this).find('cite').html();varindex=$('.layui-nav-tree li').index($(this));//遍历打开的窗口,如果当前点击的选项已经打开,则跳转到对应窗口去,不再执行for外面的两条语句,创建新窗口for(vari= 0; i<$('.x-iframe').length; i++) {if($('.x-iframe').eq(i).attr('tab-id')==index+1){tab.tabChange(index+1);event.stopPropagation();return;}};tab.tabAdd(title,url,index+1);tab.tabChange(index+1);});//点击新增子页面vartab={tabAdd:function(title,url,id){element.tabAdd('mainTab',{title: title,//用于演示 content:'<iframe tab-id="'+id+'" frameborder="0" src="'+url+'" scrolling="yes" class="x-iframe"></iframe>',id: id//实际使用一般是规定好的id,这里以时间戳模拟下 })},tabDelete:function(othis){element.tabDelete('mainTab',id);othis.addClass('layui-btn-disabled');},tabChange:function(id){//切换到指定Tab项 element.tabChange('mainTab', id);//切换到:用户管理 }};});})</script>
完整代码
云盘链接:https://pan.baidu.com/s/1ct_fSdLaHFU1CPvd4TRQMA
注意:云盘中只有html文件,下载后请修改 JQuery , layui的库文件引用地址为你自己的地址。
我的eMail:3074596466@qq.com
如果对你有用,麻烦点个推荐,哈啊哈,非常感谢!
转载于:https://www.cnblogs.com/CherishTheYouth/p/CherishTheYouth_2019_0130.html
点击菜单选项,右侧主体区新增子界面(Tab)的实现相关推荐
- Chrome 插件开发-右键菜单开发实战演示,浏览器页面右键菜单选项设置,插件右键菜单点击插件名跳转主页设置
Chrome 插件开发 - 菜单选项 浏览器页面右键菜单选项设置 ① 核心代码演示 ② 效果展示 ③ 详细参数文档 插件右键菜单点击插件名跳转主页设置 ① 核心代码演示 ② 演示效果图 浏览器页面右键 ...
- ajax实现简单的点击左侧菜单,右侧加载不同网页
实现:ajax实现点击左侧菜单,右侧加载不同网页(在整个页面无刷新的情况下实现右侧局部刷新,用到ajax注意需要在服务器环境下运行,从HBuilder自带的服务器中打开浏览效果即可) 图片.png 原 ...
- Vue头部菜单,点击菜单新增tab页签
Vue头部菜单,点击菜单新增tab页签 <template> <div class="wrapper"> <!-- 页面头部部分 -->< ...
- Android数据存储:数据库基础,在Android应用中使用数据库,附加Menu菜单选项的一些说明
为什么**持久性数据很重要: 在计分器那个应用中,是将球队得分存储在变量里,当我们旋转应用时Activity被销毁,得分记录也没有了.将设备旋转为新的方向时,Activity被重现创建,得分又变成默认 ...
- 微信搜一搜品牌官方区新增视频号触点
11月12日消息,近日,微信搜一搜"品牌官方区"进一步打通视频号,从内容引流.账号引流.活动引流三大维度完成升级,支持品牌方经简单设置后即可将视频号直播.视频号活动.品牌封面故事. ...
- 计算机右键菜单更换顺序,win10系统调整右键菜单选项顺序的恢复技巧
有关win10系统调整右键菜单选项顺序的操作方法想必大家有所耳闻.但是能够对win10系统调整右键菜单选项顺序进行实际操作的人却不多.其实解决win10系统调整右键菜单选项顺序的问题也不是难事,小编这 ...
- win7电脑右键菜单选项的顺序怎么调整
删除右键命令 右键菜单选项良莠不齐,一些没用的命令应毫不留情地删除.在上网时常会遇到IE首页或标题栏被更改的情况,对此大家已经见怪不怪了.可是最近又有一种新的源代码,在右键菜单把自己的网站名字加上,在 ...
- 通过注册表添加右键菜单选项
通过注册表添加右键菜单选项,可以通过编写注册表文件实现,也可以直接在系统注册表中新建注册表. 以前一篇<使用 YUI Compressor 批量压缩JS/CSS>中的注册表为例. 一.通过 ...
- windows 删除+增加右键新建菜单选项
目录 一.删除右键新建菜单选项 1. win + R 打开注册表 2. 查看现有的右键新建菜单选项 3. 删除现有的右键新建菜单选项 二.增加右键新建菜单选项 一.删除右键新建菜单选项 1. win ...
最新文章
- String、StringBuffer、StringBuilder介绍
- vue 使用了浏览器的刷新之后报错_Electron-vue运行之后出现了文件浏览器
- pip安装python依赖成功,pycharm中import出错
- pcl对点云进行直通滤波
- json字符串-单、双引号
- 误删电脑配置信息还原
- dd大牛的背包九讲 pdf下载_「背包问题九讲」dd大牛的背包九讲-背包问题汇总 - seo实验室...
- QQ空间 自动点赞脚本
- 就晚间宿舍熄灯时间调查
- html消息对话框,添加消息对话框 (HTML)
- java取万位的值,excel表格数值如何取万位整数,来研究下吧
- HDU 1069 DP
- word 2016 无法输入中文 输入法失效 只能输入英文
- unity2d旋转专攻◤一◢ 角度计算
- 自然语言处理之维特比(Viterbi)算法
- java异常处借接错书_Java入门第三季-异常-图书馆借书系统
- RuntimeError: CUDA error: no kernel image is available for execution on the device
- 南加州大学计算机专业研究生录取,南加州大学研究生录取案例分享
- 计算机网络和http权威指南 读书笔记
- ZYNQ飞控的设计-飞控操作系统构建
热门文章
- WSO2 Api Manager 集成 Analytics
- Java中的volatile的作用和synchronized作用
- 资源打包Assetbundle .
- Linux之telnet命令
- Spring依赖注入的模式和类型
- 【资料下载】Python 第九讲——灵活运用docker,实现深度学习的环境搭建...
- Python3爬虫数据入数据库---把爬取到的数据存到数据库,带数据库去重功能
- 数据库表迁移到阿里云的方法有哪些
- Linux下的PDF阅读器Foxit
- 用js的document.write输出的广告无阻塞加载的方法(转)