使用layui实现的左侧菜单栏以及动态操作tab项

这篇博客介绍了如何利用layui框架创建一个包含左侧菜单栏和动态操作tab项的界面。重点讲解了layui的nav、tab组件以及element模块的相关方法,如element.tabAdd、element.tabChange、element.tabDelete,并提到了JS中的contextmenu右键菜单和each函数应用。

基本界面如下:
基本界面就是如此
首先引入layui.js和layui.css文件,这个不不再多叙述。

  • 自定义CSS样式
<style type="text/css">
   .rightmenu{font-size:12px; padding:5px 10px; border-radius: 2px;}
   .rightmenu li{line-height:20px; cursor: pointer;}
   ul.layui-tab-title li:first-child i{display:none;}
</style>
  • html代码
<ul class="layui-nav layui-nav-tree layui-nav-side" lay-filter="treenav">
    <li class="layui-nav-item"><a href="javascript:;" class="site-url" data-id="1" data-title="控制台" data-url="http://www.sohu.com">控制台</a></li>
    <li class="layui-nav-item"><a href="javascript:;" class="site-url" data-title="组件" data-id="2" data-url="http://www.baidu.com">组件</a></li>
    <li class="layui-nav-item"><a href="javascript:;" class="site-url" data-title="应用" data-id="3" data-url="http://news.qq.com">应用</a></li>
    <li class="layui-nav-item">
        <a href="javascript:;">设置</a>
        <dl class="layui-nav-child">
            <dd><a href="javascript:;" class="site-url" data-title="系统设置" data-id="4" data-url="http://www.sina.com.cn">系统设置</a></dd>
            <dd><a href="javascript:;" class="site-url" data-title="网站设置" data-id="5" data-url="http://www.163.com">网站设置</a></dd>
            <dd><a href="javascript:;" class="site-url" data-title="修改密码" data-id="6" data-url="http://www.tmall.com">修改密码</a></dd>
        </dl>
    </li>
    <li class="layui-nav-item"><a href="javascript:;" class="site-url" data-title="社区" data-id="7" data-url="http://fly.layui.com/">社区</a></li>
</ul>
<div class="layui-tab layui-tab-brief" lay-filter="contentnav" lay-allowClose="true" style="margin-left:200px;margin-top:0;">
    <ul class="layui-tab-title">
        <li class="layui-this">首页</li>
    </ul>
    <ul class="layui-bg-green rightmenu" style="display: none;position: absolute;">
        <li data-type="closethis">关闭当前</li>
        <li data-type="closeall">关闭所有</li>
    </ul>
    <div class="layui-tab-content" style="padding:0;">
        <div class="layui-tab-item layui-show">首页内容...</div>
    </div>
</div>
  • js代码
<script type="text/javascript">
    layui.use('element', function(){
        var element = layui.element;
        var active={
            tabAdd:function(url,id,name){
                element.tabAdd('contentnav',{
                    title:name,
                    content:'<iframe data-frameid="'+id+'" scrolling="auto" frameborder="0" src="'+url+'" style="width:100%;"></iframe>',
                    id:id
                });
                rightMenu();
                iframeWH();
            },
            tabChange:function(id){
                element.tabChange('contentnav',id);
            },
            tabDelete:function(id){
                element.tabDelete('contentnav',id);
            },
            tabDeleteAll:function(ids){
                $.each(ids,function(index,item){
                    element.tabDelete('contentnav',item);
                });
            }
        };
        $(".site-url").on('click',function(){
            var nav=$(this);
            var length = $("ul.layui-tab-title li").length;
            if(length<=0){
                active.tabAdd(nav.attr("data-url"),nav.attr("data-id"),nav.attr("data-title"));
            }else{
                var isData=false;
                $.each($("ul.layui-tab-title li"),function(){
                    if($(this).attr("lay-id")==nav.attr("data-id")){
                        isData=true;
                    }
                });
                if(isData==false){
                    active.tabAdd(nav.attr("data-url"),nav.attr("data-id"),nav.attr("data-title"));
                }
                active.tabChange(nav.attr("data-id"));
            }
        });
        function rightMenu(){
            //右击弹出
            $(".layui-tab-title li").on('contextmenu',function(e){
                var menu=$(".rightmenu");
                menu.find("li").attr('data-id',$(this).attr("lay-id"));
                l = e.clientX;
                t = e.clientY;
                menu.css({ left:l, top:t}).show();
                return false;
            });
            //左键点击隐藏
            $("body,.layui-tab-title li").click(function(){
                $(".rightmenu").hide();
            });
        }
        $(".rightmenu li").click(function(){
            if($(this).attr("data-type")=="closethis"){
                active.tabDelete($(this).attr("data-id"));
            }else if($(this).attr("data-type")=="closeall"){
                var tabtitle = $(".layui-tab-title li");
                var ids = new Array();
                tabtitle.each(function(i){
                    ids.push($(this).attr("lay-id"));
                });
                //如果关闭所有 ,即将所有的lay-id放进数组,执行tabDeleteAll
                active.tabDeleteAll(ids);
            }
            $('.rightmenu').hide(); //最后再隐藏右键菜单
        });
        function iframeWH(){
            var H = $(window).height()-80;
            $("iframe").css("height",H+"px");
        }
        $(window).resize(function(){
            iframeWH();
        });
    }); 
</script>

知识点所涉及的主要是layui插件中的nav、tab元素以及所依赖element组件,element所提供的方法:element.tabAdd、element.tabChange和element.tabDelete,另外就是JS中自定义右键菜单contextmenu方法和each函数的应用。

评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

憨虫子

此文若对您颇有裨益,赏个铜板呗

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值