当前位置: 首页 > news >正文

【前端】element表格X轴滚动优化拖拽滚动

需求:
表格中有很多的列,导致表格有了X滚动条,由于表格的数据行很多,每次都需要滚动到最下面才能看到X滚动条,想要鼠标放表格变小手,小手按住可以拖动左右查看数据
解决:
添加监听事件
demo案例如下,vue2环境即可

<template><div ref="tableContainer" class="table-container"><el-table ref="table" :data="tableData" style="width: 100%"><el-table-column prop="date" label="日期" width="200"></el-table-column><el-table-column prop="name" label="姓名" width="200"></el-table-column><el-table-column prop="address" label="地址" width="400"></el-table-column><el-table-column prop="date" label="日期" width="200"></el-table-column><el-table-column prop="name" label="姓名" width="200"></el-table-column><el-table-column prop="address" label="地址" width="400"></el-table-column></el-table></div>
</template><script>
export default {data() {return {tableData: [{date: '2016-05-02',name: '王小虎',address: '上海市普陀区金沙江路 1518 弄',date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄',},{date: '2016-05-04',name: '王小虎',address: '上海市普陀区金沙江路 1517 弄',date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄',},{date: '2016-05-01',name: '王小虎',address: '上海市普陀区金沙江路 1519 弄',date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄',},{date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄',date: '2016-05-03',name: '王小虎',address: '上海市普陀区金沙江路 1516 弄',},],tableBodyWrapper: null,handlers: {mousedown: null,mousemove: null,mouseleave: null,mouseup: null,},isDragDown: false,dragStartX: 0,dragScrollLeft: 0,}},mounted() {this.enableDrag()},beforeDestroy() {this.removeDragListeners()},methods: {removeDragListeners() {if (this.tableBodyWrapper && this.handlers) {// 移除所有事件监听this.tableBodyWrapper.removeEventListener('mousedown', this.handlers.mousedown)this.tableBodyWrapper.removeEventListener('mouseleave', this.handlers.mouseleave)this.tableBodyWrapper.removeEventListener('mouseup', this.handlers.mouseup)this.tableBodyWrapper.removeEventListener('mousemove', this.handlers.mousemove)// 清除引用this.tableBodyWrapper = nullthis.handlers = null}},enableDrag() {this.$nextTick(() => {const table = this.$refs.table.$elconst tableBodyWrapper = table.querySelector('.el-table__body-wrapper')if (!tableBodyWrapper) {console.error('找不到表体')return}// 保存DOM引用this.tableBodyWrapper = tableBodyWrapper// 定义具名事件处理函数并保存引用const handlers = {mousedown: (e) => {const rect = tableBodyWrapper.getBoundingClientRect()this.isDragDown = truethis.dragStartX = e.clientX - rect.leftthis.dragScrollLeft = tableBodyWrapper.scrollLefttableBodyWrapper.style.cursor = 'grabbing'},mouseleave: () => {this.isDragDown = falsetableBodyWrapper.style.cursor = 'grab'},mouseup: () => {this.isDragDown = falsetableBodyWrapper.style.cursor = 'grab'},mousemove: (e) => {if (!this.isDragDown) returne.preventDefault()const rect = tableBodyWrapper.getBoundingClientRect()const x = e.clientX - rect.leftconst walk = (x - this.dragStartX) * 3tableBodyWrapper.scrollLeft = this.dragScrollLeft - walk},}// 保存处理函数引用this.handlers = handlers// 绑定事件监听tableBodyWrapper.addEventListener('mousedown', handlers.mousedown)tableBodyWrapper.addEventListener('mouseleave', handlers.mouseleave)tableBodyWrapper.addEventListener('mouseup', handlers.mouseup)tableBodyWrapper.addEventListener('mousemove', handlers.mousemove)// 隐藏滚动条tableBodyWrapper.style.overflowX = 'hidden'})},},
}
</script><style>
.table-container {width: 600px;
}
</style>
http://www.xdnf.cn/news/180883.html

相关文章:

  • 函数式编程之 Optional
  • 海底世界-第16届蓝桥第4次STEMA测评Scratch真题第5题
  • 【jax】ms(毫秒)和 μs(微秒)
  • Leetcode395.至少有 K 个重复字符的最长子串
  • Qt从零开始(1)了解
  • Golang | 倒排索引Value的设计
  • Python爬虫实战:获取ya马逊最新销售飙升榜数据并做分析,为电商选品做参考
  • 【AI】MCP协议,AI界的USB接口
  • FastAPI系列06:FastAPI响应(Response)
  • leetcode--盛最多水的容器,接雨水
  • 数值分析、数值代数之追赶法
  • Linux课程五课---Linux进程认识1
  • MySQL----查询
  • 树莓派超全系列教程文档--(43)树莓派内核简介及更新
  • 机器学习基础——Seaborn使用
  • C++11
  • 自然语言处理之机器翻译:Statistical Machine Translation(SMT)的评估方法解析与创新实践
  • 小集合 VS 大集合:MySQL 去重计数性能优化
  • 常用第三方库:sqflite数据库应用
  • Python语言基础知识详解:数据类型及运算
  • 【MQ篇】RabbitMQ之消费失败重试!
  • 2、Linux操作系统下,ubuntu22.04版本安装搜狗输入法
  • <PLC><汇川><工控>汇川PLC实现光纤缠绕设备
  • ollama的若干实践
  • Step1X-Edit: A practical framework for general image editing
  • PaddleX的安装
  • Moment 在 JavaScript 中解析、校验、操作、显示日期和时间
  • web 开发中,前端部署更新后,该怎么通知用户刷新
  • 新闻数据接口开发指南:从多源聚合到NLP摘要生成
  • 一些可用于监控服务器响应时间稳定性的工具