前端组件库 ——LayUI 知识点大全(四)

简介: 教程来源 https://zlpow.cn LayUI 2.8+/3.0 支持 CSS 变量主题定制、深浅色切换;提供移动端专用版本;支持按需引入与模块化加载;可开发自定义模块及集成 ECharts 等第三方插件,兼顾简洁性与扩展性,适合快速构建后台系统。

六、扩展与定制

6.1 主题定制 - 使用 CSS 变量(新版特性)
很多开发者希望修改 LayUI 的默认主题色来匹配品牌风格。在 LayUI 2.8 及 3.0 版本中,官方添加了 CSS 变量支持,使得重置主题变得非常简单,无需再通过复杂的 Less 变量编译。

核心 CSS 变量列表:
image.png
在项目中定制主题:

/* 在全局样式表中覆盖 CSS 变量 */
:root {
  --lay-color-primary: #4c6ef5;      /* 修改主色为靛蓝 */
  --lay-color-accent: #fa5252;        /* 修改强调色为红色 */
  --lay-border-radius: 8px;           /* 增大圆角 */
  --lay-font-family: "Inter", system-ui, sans-serif;
}

实现深色/浅色主题切换:

/* 定义两套主题变量 */
:root {
  --lay-bg-color: #ffffff;
  --lay-text-color: #333333;
  --lay-border-color: #e9ecef;
}

:root.dark {
  --lay-bg-color: #1a1a1a;
  --lay-text-color: #e0e0e0;
  --lay-border-color: #2c2c2c;
}

配合 JavaScript 动态切换:

// 切换主题函数
function toggleTheme() {
  if (document.documentElement.classList.contains('dark')) {
    document.documentElement.classList.remove('dark');
    localStorage.setItem('layui-theme', 'light');
  } else {
    document.documentElement.classList.add('dark');
    localStorage.setItem('layui-theme', 'dark');
  }
}

// 页面加载时恢复用户选择的主题
const savedTheme = localStorage.getItem('layui-theme');
if (savedTheme === 'dark') {
  document.documentElement.classList.add('dark');
}

6.2 移动端适配
LayUI 提供了专门的移动端(Mobile)版本,针对手机和平板设备进行了优化。移动端版本的核心区别如下:
image.png
移动端页面基础模板:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
  <title>移动端 LayUI 示例</title>
  <link rel="stylesheet" href="/path/to/layui/css/layui.mobile.css">
</head>
<body>
  <div class="layui-container">
    <!-- 流式列表 -->
    <ul class="layui-list">
      <li class="layui-list-item">
        <div class="layui-list-img">
          <img src="avatar.jpg">
        </div>
        <div class="layui-list-text">
          <h3>标题文字</h3>
          <p>描述信息</p>
        </div>
      </li>
    </ul>
  </div>

  <!-- 底部 Tabbar 导航栏 -->
  <div class="layui-tabbar">
    <ul class="layui-tabbar-list">
      <li class="layui-tabbar-item layui-this">
        <i class="layui-icon layui-icon-home"></i>
        <span>首页</span>
      </li>
      <li class="layui-tabbar-item">
        <i class="layui-icon layui-icon-find-fill"></i>
        <span>发现</span>
      </li>
      <li class="layui-tabbar-item">
        <i class="layui-icon layui-icon-user"></i>
        <span>我的</span>
      </li>
    </ul>
  </div>

  <script src="/path/to/layui/layui.js"></script>
</body>
</html>

6.3 按需引入组件
LayUI 默认加载 layui.all.js 会包含所有内置模块,但这种方式会增加初始加载体积。对于对性能要求较高的项目,推荐按需引入:

// 方式一:配置模块路径并按需加载
layui.config({
  base: '/static/js/modules/',   // 自定义模块存放路径
  version: true                   // 开启版本控制,避免缓存
}).use(['layer', 'form', 'table'], function(){
  var layer = layui.layer;
  var form = layui.form;
  var table = layui.table;
  // 业务代码...
});

// 方式二:通过 extend 方法扩展自定义模块
layui.extend({
  admin: '{/}/static/js/admin'    // 扩展 admin 模块
}).use(['admin', 'layer'], function(){
  var admin = layui.admin;
  var layer = layui.layer;
  // 使用扩展模块
});

使用 Vite 或 Webpack 按需打包(高级用法):

// 在支持 tree-shaking 的构建工具中,可以只导入需要的组件
import layui from 'layui-src';
import 'layui-src/css/layui.css';

// 动态加载模块
layui.use(['layer', 'form'], () => {
  // ...
});

6.4 自定义模块开发完整指南
LayUI 允许开发者使用 layui.define() 方法定义自己的模块,这对于封装复用的业务组件非常有用。以下是一个完整的自定义模块开发示例:

步骤一:定义模块

// modules/userManager.js
layui.define(['layer', 'form', 'upload'], function(exports){
  var layer = layui.layer;
  var form = layui.form;
  var upload = layui.upload;

  // 私有变量和方法
  var apiBaseUrl = '/api/user';
  var currentUser = null;

  function fetchUserList(callback) {
    $.get(apiBaseUrl + '/list', function(res){
      callback(res.data);
    });
  }

  function showUserDetail(userId) {
    $.get(apiBaseUrl + '/' + userId, function(user){
      layer.open({
        type: 1,
        title: '用户详情',
        content: `
          <div style="padding: 20px;">
            <p>姓名:${user.name}</p>
            <p>邮箱:${user.email}</p>
            <p>角色:${user.role}</p>
          </div>
        `,
        area: ['400px', '300px']
      });
    });
  }

  // 公开 API
  var api = {
    // 获取用户列表
    getList: function(callback) {
      fetchUserList(callback);
    },
    // 显示用户详情
    showDetail: function(userId) {
      showUserDetail(userId);
    },
    // 打开新增用户弹窗
    openAddDialog: function(callback) {
      layer.open({
        type: 2,
        title: '新增用户',
        content: '/page/user/add',
        area: ['600px', '500px'],
        end: function() {
          if (callback) callback();
        }
      });
    },
    // 删除用户
    deleteUser: function(userId, successCallback) {
      layer.confirm('确定删除该用户吗?', {
        icon: 3,
        title: '提示'
      }, function(index){
        layer.close(index);
        $.ajax({
          url: apiBaseUrl + '/' + userId,
          type: 'DELETE',
          success: function(){
            layer.msg('删除成功');
            if (successCallback) successCallback();
          }
        });
      });
    }
  };

  // 输出模块接口
  exports('userManager', api);
});

步骤二:在页面中使用自定义模块

<script>
layui.config({
  base: '/static/js/modules/'    // 设置自定义模块的根目录
}).use(['userManager', 'table'], function(){
  var userManager = layui.userManager;
  var table = layui.table;

  // 使用自定义模块的方法
  userManager.getList(function(users){
    console.log('用户列表:', users);
  });

  // 删除用户
  userManager.deleteUser(123, function(){
    table.reload('userTable');
  });
});
</script>

6.5 第三方插件集成
LayUI 的模块化设计使得集成第三方插件变得非常简单。以下是一些常见的集成场景:

集成 ECharts:

// 1. 引入 ECharts CDN
// 2. 在 LayUI 中使用
layui.use(['element'], function(){
  var element = layui.element;

  // 初始化 ECharts 图表
  var myChart = echarts.init(document.getElementById('chart'));
  myChart.setOption({
    title: { text: '数据趋势' },
    xAxis: { data: ['Mon', 'Tue', 'Wed'] },
    yAxis: {},
    series: [{ type: 'line', data: [120, 200, 150] }]
  });
});

封装 ECharts 为 LayUI 模块:

// modules/echarts.js
layui.define(function(exports){
  var echarts = window.echarts;
  if (!echarts) {
    console.error('请先引入 ECharts 库');
    return;
  }

  var api = {
    init: function(domId, option) {
      var dom = document.getElementById(domId);
      if (!dom) return null;
      var chart = echarts.init(dom);
      chart.setOption(option);
      return chart;
    },
    resize: function(chart) {
      chart && chart.resize();
    }
  };

  exports('echarts', api);
});

// 使用封装后的模块
layui.use(['echarts'], function(){
  var echarts = layui.echarts;
  var chart = echarts.init('chartBox', {
    xAxis: { data: ['A', 'B', 'C'] },
    yAxis: {},
    series: [{ type: 'bar', data: [10, 20, 30] }]
  });
});

总结
LayUI 以其极低的学习门槛、丰富的组件库和独特的模块化设计,在广大后端开发者及中小型项目团队中占据了独特的地位。虽然在前端工程化大行其道的今天,LayUI 可能不是构建大型复杂单页面应用的首选,但它在快速构建后台管理系统、内部运营平台、传统企业官网等方面依然具有极高的效率优势。特别是随着 3.0 版本的发布,LayUI 正努力向现代化标准靠拢,试图在“返璞归真”与“紧跟时代”之间找到完美的平衡点。
来源:
https://rvtst.cn

相关文章
|
22天前
|
前端开发 JavaScript API
前端组件库 ——LayUI 知识点大全(一)
教程来源 http://oplhc.cn LayUI是由国内开发者“贤心”于2016年推出的经典模块化前端UI框架,MIT开源。不依赖Vue/React等现代框架,零配置、低门槛、开箱即用,尤受后端开发者与中小项目青睐。2026年仍持续更新,最新版2.11+强化组件与工程化支持。
极简了解GET、POST、DELETE、PUT区别
极简了解GET、POST、DELETE、PUT区别
1216 0
|
14天前
|
存储 缓存 程序员
初级程序员必备的十大技能之计算机基础必备(一)
教程来源 http://fndvx.cn 本文系统讲解程序员必修的计算机基础,涵盖组成原理、操作系统、网络、数据库、编译原理五大核心。从冯·诺依曼结构、二进制与位运算(含权限系统实战),到内存层次与缓存优化,配原理图解与可运行代码,助你夯实内功、知其所以然。
|
22天前
|
前端开发 JavaScript 容器
前端组件库 ——LayUI 知识点大全(三)
教程来源 https://bncne.cn LayUI基础元素丰富实用:按钮支持多色、多尺寸及图标组合;图标为矢量字体,可自由缩放变色;表单模块集成验证与交互;layer弹层、table表格、laydate日期、upload上传等核心模块,让后台开发简洁高效。
|
22天前
|
移动开发 前端开发 JavaScript
前端组件库——Plyr 知识点大全(一)
教程来源 https://bncne.cn Plyr 是一款轻量(仅5KB)、无依赖的 HTML5 媒体播放器,支持视频、音频及 YouTube/Vimeo 嵌入。它提供统一美观的 UI、卓越可访问性与跨浏览器一致性,开箱即用,兼容 Vue/React,是替代原生播放器的理想选择。
|
15天前
|
算法 程序员 定位技术
初级程序员必备的十大技能之基础数据结构与算法(五)
教程来源 https://zlpow.cn/ 本节系统介绍五大基础算法思想:枚举(暴力遍历所有解)、贪心(每步选最优)、分治(分而治之、递归合并)、动态规划(记忆化重叠子问题)与回溯(深度优先+剪枝)。配以水仙花数、找零、归并排序、背包问题、N皇后等经典代码实例,直观展现思想内核与适用边界。
|
15天前
|
缓存 算法 NoSQL
初级程序员必备的十大技能之基础数据结构与算法(四)
教程来源 https://yvyus.cn/ 哈希表(散列表)是高效键值存储结构,平均查找、插入、删除均为O(1)。核心是哈希函数将键映射至数组索引;冲突常用链地址法解决;负载因子超阈值时自动扩容。广泛应用于缓存、去重、统计等场景。
|
15天前
|
算法 程序员 编译器
初级程序员必备的十大技能之基础数据结构与算法(三)
教程来源 https://rvtst.cn/ 栈是后进先出(LIFO)的受限线性表,仅允许在栈顶进行插入(push)和删除(pop)操作。本质如叠盘子:最后入者最先出。常见应用包括括号匹配、浏览器历史回退、逆波兰表达式求值等,高效且原理简洁。
|
22天前
|
前端开发 开发者 容器
前端组件库 ——LayUI 知识点大全(二)
教程来源 https://tmywi.cn LayUI提供灵活的布局系统,含固定宽(layui-container)与自适应宽(layui-fluid)两种容器;栅格基于12列响应式设计,支持多端适配(xs/sm/md/lg)、列偏移、列间距等功能,助力快速构建现代化页面结构。
|
SQL JSON Java
一些异常及解决方法记录(持续更新)
一些异常及解决方法记录(持续更新)
1038 0