Layui如何实现表格行数据在拖拽时显示动态的预览效果

梦磊同学_6424

梦磊同学_6424

2026-06-14

477人浏览

原创

默认rowDrag配置不渲染拖拽预览,仅做DOM位置交换,导致无“影子”或视觉反馈;需用Sortable.js(配ghostClass等)或soulTable.preview模式实现占位符与高亮。

拖拽行时为什么看不到“影子”或预览效果

默认的 rowdrag 配置(包括 soultable 或原生扩展)不自动渲染拖拽预览,只做 dom 位置交换。你看到的“卡顿”“跳变”或“无反馈”,本质是浏览器没渲染临时视觉状态——它只是在 tbody 里快速移动 tr 元素,没有插入占位符、没有高亮目标区、也没有悬浮“影子行”。

用 Sortable.js 实现带预览的行拖拽(最稳方案)

直接复用 Layui 表格 DOM 结构 + Sortable,它原生支持 ghostClass、chosenClass 和 dragClass,能精准控制拖拽中各阶段样式:

  • 确保已引入 Sortable.min.js(v1.15+),且 CSS 中定义了 .sortable-ghost(透明占位)、.sortable-chosen(被拖行高亮)
  • 在 table.render().done 回调里初始化,取到真实 tbody 元素:const tbody = document.querySelector('#demo-table tbody')
  • 启用 animation: 150 让移动更平滑,避免“瞬移”感
  • 关键:设置 handle: 'tr' 或绑定到 tr 上,否则可能误触发表头/空行

示例片段:

done: function() {
  const tbody = document.querySelector('#demo-table tbody');
  new Sortable(tbody, {
    animation: 150,
    ghostClass: 'sortable-ghost',
    chosenClass: 'sortable-chosen',
    dragClass: 'sortable-drag',
    handle: 'tr',
    onEnd: function(evt) {
      // 此处同步更新 data 数组,非仅 DOM
      const tableIns = table.get('demo-table');
      const data = [...tableIns.data];
      const moved = data.splice(evt.oldIndex, 1)[0];
      data.splice(evt.newIndex, 0, moved);
      tableIns.data = data;
      table.reload('demo-table', { data });
    }
  });
}

用 soulTable.slim.js 的 preview 模式(轻量但有约束)

soulTable 提供了内置预览能力,但需显式开启且依赖其 CSS:

深蓝色网站后台管理系统layui框架模板-AdminPro
深蓝色网站后台管理系统layui框架模板-AdminPro

一款深蓝色网站后台管理系统layui框架模板

下载
  • 必须加载 soulTable.css,否则 .soul-table-drag-preview 类无效
  • 初始化时传入 preview: true:new LayuiTableDrag({ elem: 'demo-table', preview: true })
  • 它会在目标行上方插入一个半透明 tr 占位符,并高亮目标区域,但不支持自定义影子内容
  • 注意:若表格启用了 fixed 列,预览占位符可能错位——这是 fixed 列脱离文档流导致的,需额外 patch CSS 定位

自己画预览行?小心 tbody 重绘冲突

有人尝试在 mousemove 里手动 clone tr 并 append 到 body,再绝对定位跟随鼠标。这容易出问题:

  • Layui 表格内部会频繁重绘 tbody(比如分页、搜索),你的 clone 节点可能被意外移除
  • clone 出来的 tr 若含 lay-event 或模板渲染内容,事件和数据绑定会丢失
  • 移动端 touch 事件未适配,预览无法跟随手指
  • 真正要做的不是“画预览”,而是让拖拽过程可感知:用 CSS 控制 opacity、transform: scale()、加 box-shadow 就足够传达状态

最常被忽略的一点:预览效果是否生效,80% 取决于 CSS 优先级。检查开发者工具里 .sortable-ghost 是否被其他样式覆盖,特别是 !important 声明或 inline style。

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

layui

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
python是前端还是后端
python是前端还是后端

Python属于前端也属于后端,其灵活性和丰富的生态系统使得开发人员能够在不同的领域中灵活运用。本专题为大家提供python相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.11

2563

5

前端如何实现即时通讯
前端如何实现即时通讯

实现即时通讯的方法有WebSocket、Long Polling、Server-Sent Events、WebRTC等等。详细介绍:1、WebSocket,它可以在客户端和服务器之间建立持久连接,实现实时的双向通信,前端可以使用 WebSocket API来创建WebSocket连接,并通过发送和接收消息来实现即时通讯;2、Long Polling,是一种模拟实时通信的技术等等。

2023.10.09

5543

6

前端和后端的区别
前端和后端的区别

前端关注的是用户界面的设计和交互,而后端则注重数据处理和逻辑控制。想了解更多前端后端的相关内容,可以阅读本专题下面的文章。

2024.03.19

6570

13

php和前端的关联介绍
php和前端的关联介绍

php既可以作为前端语言,也可以作为后端语言。想了解更多php和前端的相关内容,可以阅读本专题下面的文章。

2024.03.22

6218

10

前端外包工作内容有哪些
前端外包工作内容有哪些

前端外包工作内容包括:1. 网站和应用程序开发;2. 用户界面和交互设计;3. 用户体验优化;4. 设计和视觉开发;5. 跨浏览器兼容性;6. 性能优化;7. 维护和更新;8. 项目管理和沟通。想了解更多前端的相关内容,可以阅读本专题下面的文章。

2024.05.22

883

5

ajax教程
ajax教程

php中文网为大家带来ajax教程合集,Ajax是一种用于创建快速动态网页的技术。通过在后台与服务器进行少量数据交换,Ajax可以使网页实现异步更新。这意味着可以在不重新加载整个网页的情况下,对网页的某部分进行更新。php中文网还为大家带来ajax的相关下载资源、相关课程以及相关文章等内容,供大家免费下载使用。

2023.06.14

2920

4

ajax中文乱码解决方法
ajax中文乱码解决方法

ajax中文乱码解决方法有设置请求头部的字符编码、在服务器端设置响应头部的字符编码和使用encodeURIComponent对中文进行编码。本专题为大家提供ajax中文乱码相关的文章、下载、课程内容,供大家免费下载体验。

2023.08.31

360

5

ajax传递中文乱码怎么办
ajax传递中文乱码怎么办

ajax传递中文乱码的解决办法:1、设置统一的编码方式;2、服务器端编码;3、客户端解码;4、设置HTTP响应头;5、使用JSON格式。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2023.11.15

2753

5

ajax网站有哪些
ajax网站有哪些

使用ajax的网站有谷歌、维基百科、脸书、纽约时报、亚马逊、stackoverflow、twitter、hacker news、shopify和basecamp等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.09.24

1161

6

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
ThinkPHP配置开发与CMS后台实战
ThinkPHP配置开发与CMS后台实战

共87课时 | 13万人学习

第二十三期_综合实战
第二十三期_综合实战

共89课时 | 11.2万人学习

Layui 快速入门精讲
Layui 快速入门精讲

共5课时 | 1.6万人学习