layui 之 左侧动态菜单栏以及动态操作tab项,点击切换实现数据刷新

参考网址

https://blog.csdn.net/hmily43/article/details/105991256

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>首页</title>
    <link href="/fonts/iconfont.css" rel="stylesheet" />
    <link rel="stylesheet" href="/layui/css/layui.css"/>
    <link href="/css/common.css" rel="stylesheet" />
    <style>
        .layui-tab-title li:first-child i{
            display:none;
        
        }
 
    </style>
</head>
 
<body class="layui-layout-body">
    <div class="layui-layout layui-layout-admin">
      <div class="layui-header">
        <div class="layui-logo"></div>
        <!-- 头部区域(可配合layui已有的水平导航) -->
        <ul class="layui-nav layui-layout-left">
          <li class="layui-nav-item"><a href="">控制台</a></li>
          <li class="layui-nav-item"><a href="">商品管理</a></li>
          <li class="layui-nav-item"><a href="">用户</a></li>
          <li class="layui-nav-item" style="padding: 0 20px;">
              <select>
                <option value="0">默认</option>
                <option value="1">样式1</option>
                <option value="2">样式2</option>
                <option value="3">样式3</option>
              </select>
          </li>
        </ul>
        <ul class="layui-nav layui-layout-right">
          <li class="layui-nav-item">
            <a href="javascript:;">
              <img src="http://t.cn/RCzsdCq" class="layui-nav-img">
              贤心
            </a>
            <dl class="layui-nav-child">
              <dd><a href="">基本资料</a></dd>
              <dd><a href="">安全设置</a></dd>
            </dl>
          </li>
          <li class="layui-nav-item"><a href="">退了</a></li>
        </ul>
      </div>
      
      <div class="layui-side layui-bg-black">
        <div class="layui-side-scroll">
          <!-- 左侧导航区域(可配合layui已有的垂直导航) -->
          <ul class="layui-nav layui-nav-tree" lay-shrink="all" lay-filter="test" id="memus">
          </ul>
        </div>
      </div>
      
      <div class="layui-body">
        <!-- 内容主体区域 -->
        <div class="layui-tab layui-tab-card"  lay-allowClose="true"  lay-filter="tabContent">
            <ul class="layui-tab-title">
              <li class="layui-this">网站设置</li>
            </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 class="layui-tab-item layui-show">内容1</div>
            </div>
          </div>
      </div>
      
    </div>
</body>
 
<script type="text/javascript" src="/JS/jquery.min.js"></script>
<script src="/Layui/layui.all.js"></script>
<script src="/JS/common.js"></script>
<script src="/JS/base64.js"></script>
<script>
 
    var dataItem = "{"Menus":[{"MenuCategory":"1","MenuName":"工作计划","MenuCode":"WorkPlanButton","MenuUrl":"/Navigation/WorkPlan.aspx","MenuDescription":"通过对工作目标进行细化、分解,将责任落实到组织或人,明确完成时间,达成工作任务层层落实。"},{"MenuCategory":"1","MenuName":"思路训练","MenuCode":"TrainingThoughtButton","MenuUrl":"/Navigation/MindTrain.aspx","MenuDescription":"根据正确思路的基本内容和基本形式进行定向练习。"},{"MenuCategory":"1","MenuName":"工作实践","MenuCode":"WorkingPracticeButton","MenuUrl":"/Navigation/ReferenceStandardPractice.aspx","MenuDescription":"将工作事项按工作流程、人员、所需资料、完成时间、单位、地点进行实施和跟踪,达成项目科学管控。"},{"MenuCategory":"2","MenuName":"组织机构","MenuCode":"OrganizationButton","MenuUrl":"/Organization/OrganizationalStructure.aspx","MenuDescription":"是指组织发展、完善到一定程度,在其内部形成的结构严密、相对独立, 并彼此传递或转换能量、物质和信息的系统。"}],"MenuGroups":[{"MenuGroupID":"1","MenuGroupName":"我的工作教学"},{"MenuGroupID":"2","MenuGroupName":"系统设置"}]}";
    $(document).ready(function () {
 
        layui.use('element', function(){
            var $ = layui.jquery;
            var element = layui.element;
 
 
           //触发事件
           var active = {
                        //在这里给active绑定几项事件,后面可通过active调用这些事件
                        tabAdd: function(url,id,name) {
                            //新增一个Tab项 传入三个参数,分别对应其标题,tab页面的地址,还有一个规定的id,是标签中data-id的属性值
                            element.tabAdd('tabContent', {
                                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('tabContent', id); //根据传入的id传入到指定的tab项
                            //刷新iframe
                            var othis = $('.layui-tab-title').find('>li[lay-id="' + id + '"]'),
                            index = othis.parent().children('li').index(othis),
                            parents = othis.parents('.layui-tab').eq(0),
                            item = parents.children('.layui-tab-content').children('.layui-tab-item'),
                            src = item.eq(index).find('iframe').attr("src");
                            item.eq(index).find('iframe').attr("src", src);
 
                        }, 
                        tabDelete: function (id) {
                        element.tabDelete("tabContent", id);//删除
                        }
                        , tabDeleteAll: function (ids) {//删除所有
                            $.each(ids, function (i,item) {
                                element.tabDelete("tabContent", item); //ids是一个数组,里面存放了多个id,调用tabDelete方法分别删除
                            })
                        }
                    };
 
            //当点击有site-demo-active属性的标签时,即左侧菜单栏中内容 ,触发点击事件
            $('#memus').on('click','.site-demo-active', function() {
                var dataid = $(this);
                console.log(111);
                //这时会判断右侧.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();
            })
            // element.on('tab(tabContent)', function(data){
            //     console.log(data);
            // });
 
});
 
        //左侧导航栏的数据
        var newData = JSON.parse(dataItem);
        for (var i in newData.MenuGroups) {
            newData.MenuGroups[i].data = [];
            for (var j in newData.Menus) {
                if (newData.MenuGroups[i].MenuGroupID == newData.Menus[j].MenuCategory) {
                    newData.MenuGroups[i].data.push(newData.Menus[j]);
                }
 
           }
       }
        //添加左侧导航栏
        var html = "";
        for (var m in  newData.MenuGroups) {
            //判断没有的项
            console.log(newData.MenuGroups );
            if (newData.MenuGroups[m].data.length > 0) {
                var mark = "";
                for (var n in newData.MenuGroups[m].data) {
 
                    mark += '<dd> <a data-url="'+ newData.MenuGroups[m].data[n].MenuUrl +'"data-id="'+ m + n +'" data-title="'+ newData.MenuGroups[m].data[n].MenuName +'"  class="site-demo-active" data-type="tabAdd">'+ newData.MenuGroups[m].data[n].MenuName +'</a></dd>';
 
                }
                 html += '<li class="layui-nav-item">' +
                    '<a class="" href="javascript:;">' + newData.MenuGroups[m].MenuGroupName + '<span class="layui-nav-more"></span></a>' +
                    '<dl class="layui-nav-child">' +
                    mark +
                    '</dl>'
                    + '</li>';
 
            }
 
        }
            layui.jquery("#memus").html(html);
            layui.element.init(); //一定初始化一次
 
    });
 

</script>
 
 
</html>
  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Layui框架中,使用左侧导航点击事件实现局部刷新页面的方法如下: 1. 首先,我们需要在HTML代码中为每个导航菜单绑定点击事件,可以使用Layui的事件监听函数进行绑定。例如,我们给导航菜单的a标签添加一个自定义的lay-event属性,作为点击事件的标识符。 ```html <div class="layui-side"> <ul class="layui-nav layui-nav-tree" lay-filter="test"> <li class="layui-nav-item" lay-href="#/page1"> <a href="javascript:;" lay-event="page1">菜单1</a> </li> <li class="layui-nav-item" lay-href="#/page2"> <a href="javascript:;" lay-event="page2">菜单2</a> </li> <!-- 更多导航菜单... --> </ul> </div> ``` 2. 接下来,在JavaScript代码中监听导航菜单点击事件,同时使用Layui的内置函数进行局部刷新页面。我们可以获取到点击事件的标识符,根据不同的标识符实现对应的局部刷新逻辑。 ```javascript layui.use('element', function(){ var element = layui.element; // 监听导航菜单点击事件 element.on('nav(test)', function(elem){ // 获取点击事件的标识符 var event = elem.attr('lay-event'); // 根据不同的标识符进行局部刷新逻辑 switch(event) { case 'page1': // 实现菜单1的局部刷新逻辑 break; case 'page2': // 实现菜单2的局部刷新逻辑 break; // 更多菜单的局部刷新逻辑... default: // 默认逻辑 break; } }); }); ``` 3. 最后,根据不同的局部刷新逻辑,实现对应的业务处理代码。例如,可以使用Layui的ajax函数向服务器请求数据,然后将获取到的数据进行局部更新。 通过上述方法,在Layui框架中点击左侧导航时,只会刷新局部的内容,而不会刷新整个页面。您可以根据实际需求,编写相应的局部刷新逻辑,实现更好的用户体验。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值