Vue+element table+原生js +touch触摸事件实现移动端横向拖动

Vue+element table+原生js +touch触摸事件实现移动端横向拖动

今天做移动端项目时,想加个表格展示数据,但是调试的时候发现,表格数据很多时,想要触屏左右滑动内容,但是滑动不了,又不想引用插件实现,只好自己写个拖拽事件了

javascript 复制代码
  <el-card
              shadow="never"
              v-show="tableCardTitle"
              class="table-wrapper"
             
            >
              <div slot="header" class="clearfix">
                <span>{{ tableCardTitle }}</span>
              </div>
              <el-table :data="tableData" stripe >
                <el-table-column
                  :prop="item.key"
                  :label="item.name"
                  v-for="(item, index) in tableLabel"
                  :key="index"
                >
                </el-table-column>
              </el-table>
            </el-card>
javascript 复制代码
 updated() {
 this.addrag();
}
 methods: {
  addDrag() {
      const tableWrapperEls = document.querySelector(".el-card__body");
      console.log(tableWrapperEls);
      const tableEls = document.querySelector(
        ".el-table--scrollable-x .el-table__body-wrapper"
      );
      console.log(tableEls);

      let isDragging = false; // 是否正在拖动
      let startX = 0; // 拖动开始的X坐标
      let scrollLeft = 0; // 横向滚动的距离

      tableWrapperEls.addEventListener("touchstart", (e) => {
        isDragging = true;
        startX = e.touches[0].pageX - tableWrapperEls.offsetLeft;
        scrollLeft = tableEls.scrollLeft;
      });

      tableWrapperEls.addEventListener("touchmove", (e) => {
        if (!isDragging) return;
        e.preventDefault();//阻止默认行为
        const x = e.touches[0].pageX - tableWrapperEls.offsetLeft;
        const walk = (x - startX) * 2; // 控制拖动速度
        tableEls.scrollLeft = scrollLeft - walk;
      });

      tableWrapperEls.addEventListener("touchend", () => {
        isDragging = false;
      });
    },
 }
javascript 复制代码
<style scoped>
.table-wrapper {
  overflow-x: auto;
  -webkit-overflow-scrolling: touch;
}
</style>
相关推荐
灵感__idea6 小时前
Hello 算法:贪心的世界
前端·javascript·算法
killerbasd9 小时前
牧苏苏传 我不装了 4/7
前端·javascript·vue.js
橘子编程10 小时前
JavaScript与TypeScript终极指南
javascript·ubuntu·typescript
叫我一声阿雷吧11 小时前
JS 入门通关手册(45):浏览器渲染原理与重绘重排(性能优化核心,面试必考
javascript·前端面试·前端性能优化·浏览器渲染·浏览器渲染原理,重排重绘·reflow·repaint
大家的林语冰11 小时前
《前端周刊》尤大开源 Vite+ 全家桶,前端工业革命启动;尤大爆料 Void 云服务新产品,Vite 进军全栈开发;ECMA 源码映射规范......
前端·javascript·vue.js
jiayong2311 小时前
第 8 课:开始引入组合式函数
前端·javascript·学习
天若有情67312 小时前
【C++原创开源】formort.h:一行头文件,实现比JS模板字符串更爽的链式拼接+响应式变量
开发语言·javascript·c++·git·github·开源项目·模版字符串
M ? A13 小时前
Vue 迁移 React 实战:VuReact 一键自动化转换方案
前端·vue.js·经验分享·react.js·开源·自动化·vureact
yuki_uix13 小时前
重排、重绘与合成——浏览器渲染性能的底层逻辑
前端·javascript·面试
Burt13 小时前
我的 2026 全栈选型:Vue3 + Elysia + Bun + AlovaJS
vue.js·全栈·bun