Layui如何实现表格行鼠标滑过时显示该行数据的简易柱状图预览

梦晨姑娘_9815

梦晨姑娘_9815

2026-05-23

855人浏览

原创

应监听原生mouseenter事件,在table.render()的done回调中遍历tbody tr统一绑定;需预置图表容器、用data-index存索引、hover时检查并销毁旧实例,mouseleave时彻底dispose并清空dom。

layui如何实现表格行鼠标滑过时显示该行数据的简易柱状图预览

表格行 hover 时触发图表渲染的时机怎么选

直接在 layui.table.on('row(...)') 里调用 ECharts 初始化会失败——因为该事件只响应点击,且 DOM 节点可能尚未稳定;真正可靠的是监听原生 mouseenter 事件,在目标 tr 上绑定,并确保容器已存在、宽高不为 0。

实操建议:

  • 在 table.render() 的 done 回调中遍历 tbody tr,统一绑定 mouseenter 和 mouseleave
  • 每个 tr 绑定时,用 data-index 属性存当前行索引,避免闭包取值错位
  • 预览图容器(如 <div class="chart-preview"></div>)需提前插入 tr 内部末尾,或用 position: absolute 浮层定位,否则重绘易抖动

如何从表格行数据快速生成柱状图配置

Layui 表格每行是纯对象(data),但 ECharts 柱状图需要明确的 xAxis.data 和 series[0].data 数组。不能直接传整个对象,得先提取字段名和对应数值。

实操建议:

  • 预先定义要展示的字段数组,例如 ['sales', 'profit', 'cost'],避免遍历所有 key 引入非数字字段
  • 用 map 构建双数组:categories = fields.map(f => f),values = fields.map(f => Number(row[f]) || 0)
  • 注意 Number() 转换,防止字符串数字(如 "123")被当文本处理;空值统一转 0 避免图表报错 NaN
const option = {
  tooltip: { trigger: 'item' },
  xAxis: { type: 'category', data: categories },
  yAxis: { type: 'value' },
  series: [{
    type: 'bar',
    data: values,
    label: { show: true, position: 'top' }
  }]
};

多个 hover 图表共存时如何避免实例冲突

如果每次 mouseenter 都调用 echarts.init(),旧实例没销毁就会内存泄漏,且多次 init 同一 DOM 会报错 Initialize failed: invalid dom。

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

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

下载

实操建议:

  • 为每行分配唯一 ID(如 chart-${index}),并在 tr 上存 data-chart-id
  • hover 时先查是否存在已有实例:if (echarts.getInstanceByDom(dom)) echarts.getInstanceByDom(dom).dispose()
  • 用全局 Map 缓存实例引用:chartMap.set(id, myChart),mouseleave 时再 dispose() 并清除
  • 务必在 mouseleave 中清空容器 innerHTML 或设 height: 0,否则浮层残留影响下一次渲染

移动端或密集表格下的性能与体验取舍

100 行表格每行都绑 hover + 初始化 ECharts,滚动卡顿明显,且小屏无法看清柱状图细节。

实操建议:

  • 加节流:用 setTimeout + clearTimeout 控制 hover 延迟 150ms 触发,快速划过不渲染
  • 限制最大渲染列数:字段超过 5 个时改用横向滚动容器包裹图表,或只取前 4 个关键指标
  • 移动端直接禁用 hover,改用点击展开弹层(layer.open)并初始化完整图表
  • 图表容器设固定宽高(如 width: 200px; height: 100px;),避免 layout 触发重排

最易忽略的是 dispose 不彻底——ECharts 实例销毁后,若容器 DOM 被反复复用,仍可能残留 resize 监听器。务必在 mouseleave 后手动移除所有绑定事件,并确认 echarts.getInstanceByDom(dom) === null。

相关文章

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

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

下载

相关标签:

layui

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

相关专题

更多
ajax教程
ajax教程

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

2023.06.14

2860

4

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

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

2023.08.31

360

5

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

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

2023.11.15

2693

5

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

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

2024.09.24

1161

6

html5动画制作有哪些制作方法
html5动画制作有哪些制作方法

html5动画制作方法有使用CSS3动画、使用JavaScript动画库、使用HTML5 Canvas等。想了解更多html5动画制作方法相关内容,可以阅读本专题下面的文章。

2023.10.23

4131

6

canva可画使用技巧汇总
canva可画使用技巧汇总

本专题汇集了PHP中文网精心整理的Canva可画新手使用技巧大全,专为零基础用户打造。无论你是想制作精美海报、PPT还是社交媒体配图,这里都有从注册登录、模板搜索到AI辅助设计、导出分享的全流程保姆级教程。通过深入浅出的图文指南,帮助你快速跨越设计门槛,轻松掌握Canva可画的实用操作,让每个人都能成为设计达人!

2026.05.19

264

21

OpenJDK JVM参数怎么调优
OpenJDK JVM参数怎么调优

Java应用运行缓慢,如何调整JVM参数?本专题介绍OpenJDK JVM性能调优的基本流程,涵盖性能指标确认、运行数据采集、内存配置和垃圾回收分析,帮助你先定位瓶颈,再通过对照测试验证效果,避免直接套用参数而影响应用稳定性。

2026.10.16

20

10

OpenJDK怎么配置Java开发环境
OpenJDK怎么配置Java开发环境

怎样用OpenJDK搭建开发环境?本专题介绍版本选择、下载安装、环境变量配置和编译运行验证,帮助你理清JDK的作用及基本配置流程,并通过简单程序检查环境是否可用,为后续项目开发做好准备。

2026.10.16

0

10

OpenJDK怎么部署Java应用
OpenJDK怎么部署Java应用

Java项目开发完成后,怎样部署到目标环境并正常运行?本专题介绍OpenJDK应用部署流程,涵盖运行环境准备、版本兼容检查、应用打包、启动参数配置和日志查看,帮助你理清部署前后的操作顺序,减少环境差异造成的运行问题。

2026.10.16

0

10

热门下载

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

精品课程

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

共87课时 | 12.9万人学习

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

共89课时 | 11.1万人学习

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

共5课时 | 1.6万人学习