layui 操作Tab

  • 前言

    基于layui的tab操作,此文仅作参考,学习之用

  1. 首先下载layui后台框架
  2. 打开后台代码文件

    在内容部分插入以下代码

    

1
2
3
4
<div class="layui-tab" lay-filter="demo" lay-allowclose="true">
    <ul class="layui-tab-title"></ul>
    <div class="layui-tab-content"></div>
</div>

  3.编写js代码

    引用js:layui.all.js 或者 layui.js,这两种只是写法的区别,功能都一样,具体写法参考官方文档即可

  4.增加触发事件

    

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var active = {
            tabAdd: function (url, id) {
                //新增一个Tab项
                element.tabAdd('demo', {
                    title: '新选项' + (Math.random() * 1000 | 0) //用于演示
                  , content: '<iframe data-frameid="'+id+'" frameborder="0" name="content" scrolling="no" width="100%" src="' + url + '"></iframe>'
                  , id: id //实际使用一般是规定好的id,这里以时间戳模拟下
                })
                CustomRightClick(id);//绑定右键菜单
                FrameWH();//计算框架高度
            }
          , tabChange: function (id) {
              //切换到指定Tab项
              element.tabChange('demo', id); //切换到:用户管理
              $("iframe[data-frameid='"+id+"']").attr("src",$("iframe[data-frameid='"+id+"']").attr("src"))//切换后刷新框架
          }
            , tabDelete: function (id) {
                element.tabDelete("demo", id);//删除
            }
            , tabDeleteAll: function (ids) {//删除所有
                $.each(ids, function (i,item) {
                    element.tabDelete("demo", item);
                })
            }
        };

  当然在此之前不能忘记需要载入相应对象

1
2
3
var $ = jQuery = layui.jquery;
        var element = layui.element; //Tab的切换功能,切换事件监听等,需要依赖element模块
        var layer = layui.layer;

  5.触发代码完成后,关联触发条件,我的是左侧导航点击触发,因为重复触发,不能一直打开新的,所以写了一些判断

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//结合菜单展示内容
        $(".layui-side-scroll a").click(function () {
            var dataid = $(this);
            if ($(".layui-tab-title li[lay-id]").length <= 0) {
                active.tabAdd(dataid.attr("data-url"), dataid.attr("data-id"));
            else {
                var isData = false;
                $.each($(".layui-tab-title li[lay-id]"), function () {
                    if ($(this).attr("lay-id") == dataid.attr("data-id")) {
                        isData = true;
                    }
                })
                if (isData == false) {
                    active.tabAdd(dataid.attr("data-url"), dataid.attr("data-id"));
                }
            }
            active.tabChange(dataid.attr("data-id"));
        })

  6.为了效果更好一点,我在tab标签上增加了右键功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//绑定右键菜单
        function CustomRightClick(id) {
            //取消右键 
            $('.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);
                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;
            });
        }

  下面是右键的html代码

1
2
3
4
<ul class="rightmenu">
            <li data-type="closethis">关闭当前</li>
            <li data-type="closeall">关闭所有</li>
        </ul>

  7.右键菜单有了,就需要给右键添加功能

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$(".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();
                $.each(tabtitle, function (i) {
                    ids[i] = $(this).attr("lay-id");
                })
 
                active.tabDeleteAll(ids);
            }
 
            $('.rightmenu').hide();
        })

  8.完成后,我们还需要计算iframe的高度,因为自动高度,会导致iframe挤到一起

1
2
3
4
5
6
7
8
function FrameWH() {
            var h = $(window).height() -41- 10 - 60 -10-44 -10;
            $("iframe").css("height",h+"px");
        }
 
        $(window).resize(function () {
            FrameWH();
        })
原文地址:https://www.cnblogs.com/sword082419/p/9316806.html