Layui实现点击左侧导航栏菜单,在右侧内容生成对应的目录页,可右键删除所有页

本文介绍了如何使用Layui在点击左侧导航栏时,在右侧内容区域生成对应的目录页面,并提供了右键删除所有页面的功能。通过修改导航栏菜单的属性和添加事件监听,结合jQuery代码实现这一效果。请注意,示例代码中的导航栏是动态生成的,而不是硬编码在HTML中。提供了一份名为contentspage.js的JS文件用于实现这一功能,并提醒在使用前引入jQuery库。
摘要由CSDN通过智能技术生成

实现的效果图:

在这里插入图片描述
PS:
  本人其他界面还没有搭建,所以显示登陆失败那些页面,请忽略,请看实现效果就好了。

Html代码:

<!DOCTYPE html>
<html xmlns:th="http://www.thymeleaf.org">
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
    <title>后台管理系统页面</title>
    <link rel="stylesheet" th:href="@{css/layui.css}">
    <link rel="stylesheet" th:href="@{layui/css/layui.css}">
</head>
<style>

</style>

<body class="layui-layout-body">
<div class="layui-layout layui-layout-admin">
    <div class="layui-header custom-header">
        <div class="layui-logo">后台管理系统</div>
        <!-- 头部区域(可配合layui已有的水平导航) -->
        <ul class="layui-nav layui-layout-left">
            <li class="layui-nav-item slide-sidebar" lay-unselect>
                <a href="javascript:;" class="icon-font"><i class="ai ai-menufold"></i></a>
            </li>
        </ul>
        <ul class="layui-nav layui-layout-right">
            <li class="layui-nav-item">
                <a href="javascript:;">                  
                    初始化管理员
                </a>
                <dl class="layui-nav-child">
                    <dd><a href="">修改密码</a></dd>
                    <dd><a href="JavaScript:void(0)" id="logout">退出</a></dd>
                </dl>
            </li>          
        </ul>
    </div>

    <div class="layui-side layui-bg-black" id="menudata">
        <div class="layui-side-scroll">
            <!-- 左侧导航区域(可配合layui已有的垂直导航) -->
            <ul class="layui-nav layui-nav-tree" lay-filter="test">

            </ul>
        </div>
        <div title="菜单折叠" class="kit-side-fold" style="position: fixed;margin-left:200px;top: 50%;">
            <i class="layui-icon" style="color: #2c2e2f;font-size: 15px;">&#xe635;</i>
        </div>
    </div>

  
    <div class="layui-tab" lay-filter="demo" lay-allowclose="true" style="margin-left: 200px;">
        <ul class="layui-tab-title">
        </ul>
        <ul class="rightmenu" style="display: none;position: absolute;">
            <li data-type="closethis">关闭当前</li>
            <li data-type="closeall">关闭所有</li>
        </ul>
        <div class="layui-tab-content">
        </div>
    </div>
</div>
<script type="text/javascript" th:src="@{js/jquery-3.3.1.min.js}"></script>
<script type="text/javascript" th:src="@{layui/layui.js}"></script>
<script type="text/javascript" th:src="@{layui/layui.all.js}"></script>
<script type="text/javascript" th:src="@{js/foldmenu.js}"></script>
<script type="text/javascript" th:src="@{js/contentspage.js}"></script>

<script>    //JavaScript代码区域
layui.use('element', function () {
    var element = layui.element;
    var layer = layui.layer;
});

var tempArr = "";
var son_permission = "";


//页面加载事件
window.onload = function () {
    getMenuData();
    getJurisdiction();
};

//获取菜单权限
function getJurisdiction() {
    //获取用户对应的权限
    $.post("/MenudataController/findMenudataByJurisdiction", function (result) {
        var str = result[0].permission;//01011,01021
        tempArr = str.split(",");//分割 01011 01021
    });
}


//获取导航栏菜单
function getMenuData() {
    $.ajax({
        type: "GET",
        url: "/LoginController/findMenuData",
        cache: false,
        success: function (data) {
            //将layui在页面加载时渲染出来的span.layui-nav-bar利用DOM先删除掉再重新渲染
            $('#nav').find('span.layui-nav-bar').remove();

            //遍历
            $.each(data, function (i) {
                var menu = '<li class="layui-nav-item h-menu">' + '<a href="javascript:;">' + data[i].title + '</a>';
                if (data[i].menudataList) {
                    var menus = '';
                    $.each(data[i].menudataList, function (j) {
                        for (var a = 0; a < tempArr.length; a++) {
                            son_permission = tempArr[a].substring(0, 4);//截取前4位 οnclick="going(this)"
                            if (son_permission == data[i].menudataList[j].funcid) {                              
                                menus = menus + '<dl class="layui-nav-child">' + '<dd><a href="javascript:;" οnclick="showPage()" data-url="' + data[i].menudataList[j].url + '"  data-title="' + data[i].menudataList[j].title + '" data-id="' + data[i].menudataList[j].id + '" class="site-demo-active" data-type="tabAdd">' + data[i].menudataList[j].title + '</a></dd>' + '</dl>';
                            }
                        }
                    })
                    menu = menu + menus;
                }
                menu = menu + '</li>';
                //console.log(menu)
                //有二级菜单才显示出来
                if (menus != "") {
                    $("#menudata ul").append(menu);
                }

            });
            xuanran();//重新渲染
        }
    });
}

//重新渲染
function xuanran() {
    layui.use('element', function () {
        var element = layui.element;
        var layFilter = $("#nav").attr('lay-filter');
        element.render('nav', layFilter);
    })
}

//退出登录
layui.use('layer', function () {
    $("#logout").click(function () {
        layer.confirm("确定要注销登录吗?注销后密码将不再记住!", {
            icon: 3,
            title: '提示',
            btn: ['确定', '取消'],
            offset: '150px'
        }, function (index) {
            layer.close(index);
            window.location.href = "/LoginController/loginOut";
        });
    });
});


</script>
</body>
</html>

实现要求:

  你只要在你的导航栏菜单那里加上对应的属性和类等信息,修改核心部分核心代码即可。

注意:

  本人的导航栏是通过查询配置文件绑定的,不是在页面写死的,所以你在html上面找不到我的导航栏信息,但是这不影响实现效果。

  需要修改的地方基本是你的<dd></dd>标签,请参考我的拼接导航栏的代码。

<dd><a href="javascript:;" onclick="showPage()" data-url="' + data[i].menudataList[j].url + '"  data-title="' + data[i].menudataList[j].title + '" data-id="' + data[i].menudataList[j].id + '" class="site-demo-active" data-type="tabAdd">' + data[i].menudataList[j].title + '</a></dd>

<dd>标签上加上以下几个属性等东西。

  • onclick="showPage()" //点击事件
  • data-url="你要跳转的页面url"
  • data-title="你的导航栏名称"
  • data-id="导航栏id"
  • data-type="tabAdd" //添加事件

然后添加以下jquery代码,我已经将它封装成一个js文件了,要用是时候,在页面引入即可,如下:

contentspage.js

/**
 * @author 程序羊
 * 2021年3月18日17:22:11
 */
function showPage() {
    layui.use('element', function () {
        var $ = layui.jquery;
        var element = layui.element; //Tab的切换功能,切换事件监听等,需要依赖element模块

        //触发事件
        var active = {
            //在这里给active绑定几项事件,后面可通过active调用这些事件
            tabAdd: function (url, id, name) {
                //新增一个Tab项 传入三个参数,分别对应其标题,tab页面的地址,还有一个规定的id,是标签中data-id的属性值
                //关于tabAdd的方法所传入的参数可看layui的开发文档中基础方法部分
                element.tabAdd('demo', {
                    title: name,
                    content: '<iframe data-frameid="' + id + '" scrolling="auto" frameborder="0" src="' + url + '.html" style="width:100%;height:99%;"></iframe>',
                    id: id //规定好的id
                })
                CustomRightClick(id); //给tab绑定右击事件
                FrameWH();  //计算ifram层的大小
            },
            tabChange: function (id) {
                //切换到指定Tab项
                element.tabChange('demo', id); //根据传入的id传入到指定的tab项
            },
            tabDelete: function (id) {
                element.tabDelete("demo", id);//删除
            }
            , tabDeleteAll: function (ids) {//删除所有
                $.each(ids, function (i, item) {
                    element.tabDelete("demo", item); //ids是一个数组,里面存放了多个id,调用tabDelete方法分别删除
                })
            }
        };


        //当点击有site-demo-active属性的标签时,即左侧菜单栏中内容 ,触发点击事件
        $('.site-demo-active').on('click', function () {
            var dataid = $(this);

            //这时会判断右侧.layui-tab-title属性下的有lay-id属性的li的数目,即已经打开的tab项数目
            if ($(".layui-tab-title li[lay-id]").length <= 0) {
                //如果比零小,则直接打开新的tab项
                active.tabAdd(dataid.attr("data-url"), dataid.attr("data-id"), dataid.attr("data-title"));
            } else {
                //否则判断该tab项是否以及存在

                var isData = false; //初始化一个标志,为false说明未打开该tab项 为true则说明已有
                $.each($(".layui-tab-title li[lay-id]"), function () {
                    //如果点击左侧菜单栏所传入的id 在右侧tab项中的lay-id属性可以找到,则说明该tab项已经打开
                    if ($(this).attr("lay-id") == dataid.attr("data-id")) {
                        isData = true;
                    }
                })
                if (isData == false) {
                    //标志为false 新增一个tab项
                    active.tabAdd(dataid.attr("data-url"), dataid.attr("data-id"), dataid.attr("data-title"));
                }
            }
            //最后不管是否新增tab,最后都转到要打开的选项页面上
            active.tabChange(dataid.attr("data-id"));
        });

        function CustomRightClick(id) {
            //取消右键  rightmenu属性开始是隐藏的 ,当右击的时候显示,左击的时候隐藏
            $('.layui-tab-title li').on('contextmenu', function () {
                return false;
            })
            $('.layui-tab-title,.layui-tab-title li').click(function () {
                $('.rightmenu').hide();
            });
            //桌面点击右击
            $('.layui-tab-title li').on('contextmenu', function (e) {
                var popupmenu = $(".rightmenu");
                popupmenu.find("li").attr("data-id", id); //在右键菜单中的标签绑定id属性

                //判断右侧菜单的位置
                l = ($(document).width() - e.clientX) < popupmenu.width() ? (e.clientX - popupmenu.width()) : e.clientX;
                t = ($(document).height() - e.clientY) < popupmenu.height() ? (e.clientY - popupmenu.height()) : e.clientY;
                popupmenu.css({left: l, top: t}).show(); //进行绝对定位
                //alert("右键菜单")
                return false;
            });
        }

        $(".rightmenu li").click(function () {

            //右键菜单中的选项被点击之后,判断type的类型,决定关闭所有还是关闭当前。
            if ($(this).attr("data-type") == "closethis") {
                //如果关闭当前,即根据显示右键菜单时所绑定的id,执行tabDelete
                active.tabDelete($(this).attr("data-id"))
            } else if ($(this).attr("data-type") == "closeall") {
                var tabtitle = $(".layui-tab-title li");
                var ids = new Array();
                $.each(tabtitle, function (i) {
                    ids[i] = $(this).attr("lay-id");
                })
                //如果关闭所有 ,即将所有的lay-id放进数组,执行tabDeleteAll
                active.tabDeleteAll(ids);
            }

            $('.rightmenu').hide(); //最后再隐藏右键菜单
        })

        function FrameWH() {
            var h = $(window).height() - 41 - 10 - 60 - 10 - 44 - 10;
            $("iframe").css("height", h + "px");
        }

        $(window).resize(function () {
            FrameWH();
        })
    });

}

温馨提示:

  使用前记得先引入jquery.js的插件

到此,点击导航栏出现目录页的效果就可以实现了,祝你“码”到成功!

源码下载链接:
提取码:i6ip

相关文章推荐

Layui实现左侧导航栏菜单可自由折叠
在这里插入图片描述

感谢您的点赞与关注。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序yang

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值