前端组件库 ——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

相关文章
|
4月前
|
前端开发 JavaScript API
前端组件库 ——LayUI 知识点大全(一)
教程来源 http://oplhc.cn LayUI是由国内开发者“贤心”于2016年推出的经典模块化前端UI框架,MIT开源。不依赖Vue/React等现代框架,零配置、低门槛、开箱即用,尤受后端开发者与中小项目青睐。2026年仍持续更新,最新版2.11+强化组件与工程化支持。
|
JSON 数据格式 容器
Layui 内置方法 - layer.photos(相册层)
Layui 内置方法 - layer.photos(相册层)
2498 0
layui实现登录加载loading的解决方案
layui实现登录加载loading的解决方案
598 0
|
4月前
|
前端开发 开发者 容器
前端组件库 ——LayUI 知识点大全(二)
教程来源 https://tmywi.cn LayUI提供灵活的布局系统,含固定宽(layui-container)与自适应宽(layui-fluid)两种容器;栅格基于12列响应式设计,支持多端适配(xs/sm/md/lg)、列偏移、列间距等功能,助力快速构建现代化页面结构。
|
4月前
|
前端开发 JavaScript 容器
前端组件库 ——LayUI 知识点大全(三)
教程来源 https://bncne.cn LayUI基础元素丰富实用:按钮支持多色、多尺寸及图标组合;图标为矢量字体,可自由缩放变色;表单模块集成验证与交互;layer弹层、table表格、laydate日期、upload上传等核心模块,让后台开发简洁高效。
|
3月前
|
小程序 前端开发 Java
微信商城小程序源码最新版|全开源UniApp完整包|前后端快速搭建商城
这是一套基于UniApp(前端)+ SpringBoot(后端)的全开源微信商城小程序源码,无加密、可商用。涵盖商品管理、订单系统、微信支付、分销裂变、多商户入驻等完整电商功能,支持H5/小程序/APP多端编译。源码结构清晰,含前后端及后台管理系统,附详细部署指南与二次开发建议。
1343 0
|
4月前
|
SQL 存储 关系型数据库
【MySQL】《MySQL基础架构 面试核心考点问答清单》
本文是MySQL基础架构面试高频考点精编手册,涵盖Server层(连接器、分析器、优化器、执行器)、存储引擎层(InnoDB核心机制)、日志体系(redo/binlog/undo)及SQL全链路执行流程,答案精准对标校招社招真题,直击得分点,助你高效通关数据库面试。
|
8月前
|
人工智能 Linux 异构计算
使用阿里云GPU服务器部署DeepSeek-R1模型图文教程,2026年最新新手AI大模型部署流程
本文介绍2026年最新阿里云GPU服务器部署DeepSeek-R1大模型的全流程,包含创建GPU实例、部署模型及启动Open WebUI三步。涵盖实例配置选择、Docker环境搭建、模型下载与推理服务启动,适合新手快速上手AI大模型部署。
1587 12
Sql Server 增加字段、修改字段、修改类型、修改默认值
Sql Server 增加字段、修改字段、修改类型、修改默认值
1657 0