el-table的横向滚动拖拽

[复制链接]
发表于 2025-10-2 09:44:53 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
el-table实现鼠标横向拖拽滚动和滚轴滚动


  • 封装方法,这是vue2写法,紧张是传一个el-table 的一个ref,相干的逻辑在该函数内
    函数功能:

    • 监听鼠标滚轮变乱,实现横向滚动
    • 不能选中笔墨
    • 添加鼠标左键长按变乱,实现横向拖拽

  1. /**
  2. * 为 element-ui 表格添加横向滚动和拖拽功能
  3. * @param {Object} tableRef - 表格的 Vue ref 对象
  4. */
  5. export function initTableScroll(tableRef) {
  6.   if (!tableRef || !tableRef.$el) {
  7.     console.warn('tableRef 无效');
  8.     return;
  9.   }
  10.   const tableEl = tableRef.$el;
  11.   const bodyWrapper = tableRef.bodyWrapper;
  12.   // 监听鼠标滚轮事件,实现横向滚动
  13.   tableEl.addEventListener('mousewheel', (e) => {
  14.     e.preventDefault(); // 阻止默认的垂直滚动
  15.     const delta = e.wheelDelta || -e.detail;
  16.     // console.log(delta);
  17.     bodyWrapper.scrollLeft -= delta;
  18.   }, { passive: false });
  19.   // 不能选中文字
  20.   tableEl.addEventListener('selectstart', (e) => {
  21.     e.preventDefault();
  22.   });
  23.   // 添加鼠标左键长按事件,实现横向拖拽
  24.   tableEl.addEventListener('mousedown', (e) => {
  25.     console.log(e);
  26.     if (e.button === 0) {
  27.       const startX = e.clientX;
  28.       const startScrollLeft = bodyWrapper.scrollLeft;
  29.       const handleMouseMove = (e) => {
  30.         const dx = e.clientX - startX;
  31.         bodyWrapper.scrollLeft = startScrollLeft - dx;
  32.       };
  33.       const handleMouseUp = () => {
  34.         document.removeEventListener('mousemove', handleMouseMove);
  35.         document.removeEventListener('mouseup', handleMouseUp);
  36.       };
  37.       document.addEventListener('mousemove', handleMouseMove);
  38.       document.addEventListener('mouseup', handleMouseUp);
  39.     }
  40.   });
  41. }
复制代码
2.使用示例:
  1. //table.vue
  2. //html
  3. <el-table
  4.       ref="elTableRef"
  5.    、、、、、
  6.     >
  7.   data() {
  8.     return {
  9.       elTableRef: null,
  10.     };
  11.   },
  12. mounted(){
  13. initTableScroll(this.$refs.elTableRef);
  14. }
复制代码
vue3的写法照着上面的修改一下就行
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表