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>
相关推荐
jump_jump3 分钟前
Ripple:一个现代的响应式 UI 框架
前端·javascript·前端框架
神秘的猪头11 分钟前
🎨 CSS 这种“烂大街”的技术,怎么在 React 和 Vue 里玩出花来?—— 模块化 CSS 深度避坑指南
css·vue.js·react.js
夏天想12 分钟前
element-plus的输入数字组件el-input-number 显示了 加减按钮(+ -) 和 小三角箭头(上下箭头),怎么去掉+,-或者箭头
前端·javascript·vue.js
进击的野人16 分钟前
Vue 3 响应式数据解构:toRef 与 toRefs 的深度解析
前端·vue.js·前端框架
清风徐来QCQ1 小时前
SpringMvC
前端·javascript·vue.js
Swift社区1 小时前
ArkTS Web 组件里,如何通过 javaScriptProxy 让 JS 同步调用原生方法
开发语言·前端·javascript
TttHhhYy1 小时前
小记,antd design vue的下拉选择框,选项部分不跟着滑动走,固定在屏幕某个部位,来改
前端·vue.js·sql
boooooooom1 小时前
Vue3 宏编译的限制与解决方案:深入理解与实践突破
vue.js
Hi_kenyon1 小时前
快速入门VUE与JS(二)--getter函数(取值器)与setter(存值器)
前端·javascript·vue.js
3秒一个大2 小时前
模块化 CSS:解决样式污染的前端工程化方案
css·vue.js·react.js