首页
/ Layui表格组件实现行拖拽排序功能详解

Layui表格组件实现行拖拽排序功能详解

2025-05-05 08:22:23作者:史锋燃Gardner

Layui作为一款经典的前端UI框架,其表格组件(table)在日常开发中被广泛使用。在实际业务场景中,表格行排序是一个常见需求,而原生Layui表格仅支持通过edit参数进行排序操作。本文将详细介绍如何为Layui表格实现更直观的行拖拽排序功能。

实现原理分析

Layui表格本身不直接支持拖拽排序功能,但我们可以通过集成第三方拖拽库Sortable.js来实现这一需求。Sortable.js是一个轻量级的拖拽排序库,具有以下特点:

  1. 支持触摸设备和桌面设备
  2. 动画效果流畅
  3. API简单易用
  4. 兼容性好

完整实现方案

基础实现步骤

  1. 引入必要的JS库(Layui和Sortable.js)
  2. 渲染Layui表格
  3. 在表格渲染完成后初始化Sortable
  4. 处理拖拽结束事件并更新表格数据

核心代码实现

layui.use(['table', 'jquery'], function(){
  const { table } = layui;
  
  // 渲染表格
  var inst = table.render({
    elem: "#table-demo",
    cols: [[
      {field: "id", title: "ID", sort: true},
      {field: "username", title: "用户"},
      // 其他列配置...
    ]],
    data: createData(),
    done: function() {
      // 表格渲染完成后初始化拖拽
      var tbv = this.elem.next();
      var tbody = tbv.find('tbody');
      
      new Sortable(tbody[0], {
        ghostClass: "ghost",  // 拖拽时的样式类
        onEnd: function(evt) {
          // 获取表格缓存数据
          var tc = table.cache['table-demo'];
          
          // 调整数据顺序
          var currentNode = tc.splice(evt.oldIndex, 1)[0];
          tc.splice(evt.newIndex, 0, currentNode);
          
          // 重新加载数据
          table.reloadData('table-demo', {
            data: tc
          });
        }
      });
    }
  });
});

样式优化

为提升拖拽体验,可以添加一些CSS样式:

.ghost {
  opacity: .4;
  background: #c8ebfb;
}

进阶优化建议

  1. 性能优化:对于大数据量表格,建议使用虚拟滚动技术
  2. 用户体验:添加拖拽手柄,明确指示可拖拽区域
  3. 数据持久化:拖拽完成后可将新顺序保存到服务器
  4. 边界处理:处理表格分页情况下的拖拽行为

注意事项

  1. 确保Sortable.js在Layui之后加载
  2. 表格必须设置固定高度或使用height参数,否则可能出现拖拽区域识别问题
  3. 如果表格有复杂操作列(如下拉菜单),需要额外处理事件冲突

通过上述方案,我们成功为Layui表格添加了直观的行拖拽排序功能,大大提升了用户操作体验。这种实现方式既保留了Layui表格的所有原生功能,又增加了实用的拖拽交互,是业务场景中的理想解决方案。

登录后查看全文
热门项目推荐

项目优选

收起
ohos_react_nativeohos_react_native
React Native鸿蒙化仓库
C++
176
261
RuoYi-Vue3RuoYi-Vue3
🎉 (RuoYi)官方仓库 基于SpringBoot,Spring Security,JWT,Vue3 & Vite、Element Plus 的前后端分离权限管理系统
Vue
860
511
ShopXO开源商城ShopXO开源商城
🔥🔥🔥ShopXO企业级免费开源商城系统,可视化DIY拖拽装修、包含PC、H5、多端小程序(微信+支付宝+百度+头条&抖音+QQ+快手)、APP、多仓库、多商户、多门店、IM客服、进销存,遵循MIT开源协议发布、基于ThinkPHP8框架研发
JavaScript
93
15
openGauss-serveropenGauss-server
openGauss kernel ~ openGauss is an open source relational database management system
C++
129
182
openHiTLSopenHiTLS
旨在打造算法先进、性能卓越、高效敏捷、安全可靠的密码套件,通过轻量级、可剪裁的软件技术架构满足各行业不同场景的多样化要求,让密码技术应用更简单,同时探索后量子等先进算法创新实践,构建密码前沿技术底座!
C
259
300
kernelkernel
deepin linux kernel
C
22
5
cherry-studiocherry-studio
🍒 Cherry Studio 是一款支持多个 LLM 提供商的桌面客户端
TypeScript
595
57
CangjieCommunityCangjieCommunity
为仓颉编程语言开发者打造活跃、开放、高质量的社区环境
Markdown
1.07 K
0
HarmonyOS-ExamplesHarmonyOS-Examples
本仓将收集和展示仓颉鸿蒙应用示例代码,欢迎大家投稿,在仓颉鸿蒙社区展现你的妙趣设计!
Cangjie
398
371
Cangjie-ExamplesCangjie-Examples
本仓将收集和展示高质量的仓颉示例代码,欢迎大家投稿,让全世界看到您的妙趣设计,也让更多人通过您的编码理解和喜爱仓颉语言。
Cangjie
332
1.08 K