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

yizhihongxing

好的。使用layui实现左侧菜单栏和动态操作tab项是一个比较常见的需求,以下是实现的详细攻略。

实现左侧菜单栏

使用tree组件渲染菜单

LayUI提供了tree组件用于展示菜单栏,我们可以使用tree组件来渲染左侧菜单。

<div class="layui-col-md3">
  <div class="layui-card">
    <div class="layui-card-header">菜单</div>
    <div class="layui-card-body">
      <div id="menu" class="layui-tree"></div>
    </div>
  </div>
</div>

上面的代码片段中,我们使用了tree组件,并将其放在了一个layui-card中展示。tree组件渲染菜单需要一个数据源,我们可以使用一个js数组来存储菜单信息。

var menuData = [
  {
    title: '首页',
    icon: 'layui-icon-home',
    href: '/'
  },
  {
    title: '用户管理',
    icon: 'layui-icon-user',
    spread: true,
    children: [
      {
        title: '用户列表',
        icon: 'layui-icon-user',
        href: '/user/list'
      },
      {
        title: '新增用户',
        icon: 'layui-icon-add-circle',
        href: '/user/add'
      }
    ]
  }
];

layui.use(['tree'], function () {
  var tree = layui.tree;

  tree.render({
    elem: '#menu',
    data: menuData,
    click: function (obj) {
      // TODO: 处理菜单点击事件
    }
  });
});

在上面的代码片段中,我们使用了一个数组menuData来存储菜单信息。其中,每个菜单项都有一个title字段表示菜单名称,一个icon字段表示菜单图标(这里使用了LayUI内置的图标),一个href字段表示菜单链接地址。如果一个菜单项有子菜单,则使用children字段存储子菜单。

然后,我们使用tree.render方法将菜单渲染到元素#menu中。我们还可以通过指定click方法来处理菜单的点击事件。

处理菜单点击事件

我们的菜单栏已经渲染出来了,现在需要给菜单的点击事件绑定处理方法。

tree.render({
  elem: '#menu',
  data: menuData,
  click: function (obj) {
    var href = obj.data.href;
    var title = obj.data.title;
    var icon = obj.data.icon;

    addTab(title, href, icon);
  }
});

在上面的代码片段中,我们在click方法中通过obj.data获取到当前点击的菜单项相关信息,然后调用addTab方法打开一个新的tab页来展示菜单对应的内容。下面我们就来详细讲解如何实现动态操作tab项。

动态操作tab项

打开一个新的tab页

我们可以使用LayUI的tab组件来创建和管理多个tab页,使用方式如下。

layui.use('element', function () {
  var element = layui.element;

  function addTab(title, href, icon) {
    element.tabAdd('demo', {
      title: title,
      content: '<iframe frameborder="0" src="' + href + '"></iframe>',
      icon: icon
    });
  }
});

在上面的代码片段中,我们使用了element.tabAdd方法创建了一个新的tab页。其中,第一个参数'demo'表示tab所在的父级元素(可以是tab的容器也可以是tab的所在区域的id),第二个参数是一个对象,包含了title、content、icon等选项。其中,title表示tab的标题,content是tab的内容,这里使用了一个iframe来展示页面。icon表示tab的图标,这里我们可以直接使用菜单对应的图标。

关闭一个tab页

我们可以使用element.tabDelete方法来关闭一个tab页。

layui.use('element', function () {
  var element = layui.element;

  function deleteTab(title) {
    element.tabDelete('demo', title);
  }
});

在上面的代码片段中,我们使用了element.tabDelete方法关闭了一个tab页。其中,第一个参数'demo'表示tab所在的父级元素,第二个参数是一个字符串,表示要关闭的tab的title。

示例

下面是一个完整的实例代码,包含了左侧菜单和tab操作功能。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>动态操作tab页</title>
  <link rel="stylesheet" href="https://cdn.bootcdn.net/ajax/libs/layui/2.5.7/css/layui.min.css">
</head>
<body>
<div class="layui-container">
  <div class="layui-row layui-col-space15">
    <div class="layui-col-md3">
      <div class="layui-card">
        <div class="layui-card-header">菜单</div>
        <div class="layui-card-body">
          <div id="menu" class="layui-tree"></div>
        </div>
      </div>
    </div>
    <div class="layui-col-md9">
      <div class="layui-tab layui-tab-card" lay-filter="demo">
        <ul class="layui-tab-title">
          <li class="layui-this">欢迎界面</li>
        </ul>
        <div class="layui-tab-content">
          <div class="layui-tab-item layui-show"><iframe frameborder="0" src="/welcome"></iframe></div>
        </div>
      </div>
    </div>
  </div>
</div>

<script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="https://cdn.bootcdn.net/ajax/libs/layui/2.5.7/layui.min.js"></script>
<script>
  var menuData = [
    {
      title: '首页',
      icon: 'layui-icon-home',
      href: '/welcome'
    },
    {
      title: '用户管理',
      icon: 'layui-icon-user',
      spread: true,
      children: [
        {
          title: '用户列表',
          icon: 'layui-icon-user',
          href: '/user/list'
        },
        {
          title: '新增用户',
          icon: 'layui-icon-add-circle',
          href: '/user/add'
        }
      ]
    }
  ];

  layui.use(['tree', 'element'], function () {
    var tree = layui.tree;
    var element = layui.element;

    tree.render({
      elem: '#menu',
      data: menuData,
      click: function (obj) {
        var href = obj.data.href;
        var title = obj.data.title;
        var icon = obj.data.icon;

        addTab(title, href, icon);
      }
    });

    function addTab(title, href, icon) {
      if ($('.layui-tab-title li[lay-id="' + href + '"]').length > 0) {
        element.tabChange('demo', href);
      } else {
        element.tabAdd('demo', {
          title: title,
          content: '<iframe frameborder="0" src="' + href + '"></iframe>',
          icon: icon,
          id: href
        });
      }
    }

    $(document).on('click', '.layui-tab-title .layui-tab-close', function () {
      var title = $(this).parent('li').attr('lay-id');
      deleteTab(title);
      return false;
    });

    function deleteTab(title) {
      element.tabDelete('demo', title);
    }
  });
</script>
</body>
</html>

在上面的示例代码中,我们使用了jQuery来绑定tab关闭按钮的点击事件。同时,我们在addTab方法中提供了判断tab是否已经存在的逻辑,避免重复打开同一页面时出现多个相同的tab页。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用layui实现的左侧菜单栏以及动态操作tab项方法 - Python技术站

(0)
上一篇 2023年6月10日
下一篇 2023年6月10日

相关文章

  • element中form组件prop嵌套属性的问题解决

    当我们在使用element组件库的form组件进行表单处理时,可能会遇到prop属性中需要嵌套传递另一个属性值的情况。比如,我们需要将一个表单项的验证规则(rules)传递给另外一个表单项,例如两个密码输入框输入必须相同。 以下是解决此类问题的攻略: 步骤一:在模板中添加ref属性 在模板中,我们需要添加一个ref属性来标识这个表单项,这样我们在代码中就可以…

    JavaScript 2023年6月10日
    00
  • javascript数组includes、reduce的基本使用

    下面详细讲解一下“JavaScript数组includes、reduce的基本使用”的攻略。在这个攻略中,我们将会讨论到:如何使用includes方法查找数组中的元素,以及如何使用reduce方法对数组进行累加计算。 includes方法 includes方法用于判断数组是否包含某个元素,返回值为布尔类型。它的语法如下: array.includes(sea…

    JavaScript 2023年5月27日
    00
  • 浅析js中substring和substr的方法

    浅析JS中substring和substr的方法 在JavaScript中, substring 和 substr 是两个常用的字符串方法,用于截取字符串的一部分并返回。但是它们的不同之处在于它们的使用方式和截取字符串的方式。下面我们来浅析一下它们的使用方法及区别。 一、substring方法 1.1 方法定义 substring(startIndex, e…

    JavaScript 2023年6月10日
    00
  • JS版获取字符串真实长度和取固定长度的字符串函数

    获取字符串真实长度和取固定长度的字符串函数,可以方便地进行字符串截取和限制。 获取字符串真实长度 常规的字符串长度获取方式是使用 str.length,但这种方式对于非 ASCII 字符(如中文、日文、韩文等)是不准确的,因为每个非 ASCII 字符占用的字节不同。解决这个问题的方法是使用 encodeURIComponent 将字符串编码为 URI 组件,…

    JavaScript 2023年5月28日
    00
  • Javascript Global decodeURI() 函数

    以下是关于JavaScript Global对象中decodeURI()函数的完整攻略,包括两个示例说明。 JavaScript Global对象中的decodeURI()函数 JavaScript Global对象中的decodeURI()函数用于解码一个编码过的URI字符串。URI是Uniform Resource Identifier的缩写,它是一个用…

    JavaScript 2023年5月11日
    00
  • 原生JS查找元素的方法(推荐)

    原生JS查找元素的方法(推荐) 在前端开发中,我们经常需要对页面中的元素进行操纵和操作,因此查找元素的能力显得尤为重要。下面是一些原生JS查找元素的方法,推荐使用这些方法来获取页面中的元素。 1. getElementById方法 getElementById方法可以根据DOM元素的id属性来获取一个元素。下面是一个示例: var myElement = d…

    JavaScript 2023年6月10日
    00
  • 一文详解JavaScript闭包典型应用

    一、JavaScript闭包基础概念 闭包指的是函数内部能够访问其外部作用域的一种机制。简单来说,闭包就是一个函数引用了其包含作用域中的变量(即使在该函数外部调用时也能够访问这些变量)。通常,一个函数执行完毕后,其内部变量将会释放,但如果该函数内部存在闭包,则这些变量仍然会被保存。 二、闭包的经典应用 实现函数记忆 函数记忆是一种用来缓存函数结果的技术。它可…

    JavaScript 2023年6月10日
    00
  • javacript获取当前屏幕大小

    获取当前屏幕大小可以通过JavaScript的内置对象window来实现。使用window对象提供的属性和方法可以获取浏览器窗口的相关信息。 方法一:使用innerWidth和innerHeight属性获取屏幕大小 window.innerWidth属性返回浏览器窗口的视口宽度,即不包括滚动条的宽度。window.innerHeight属性返回浏览器窗口的视…

    JavaScript 2023年6月11日
    00
合作推广
合作推广
分享本页
返回顶部