当前位置:首页 > VUE

vue实现表格滑动

2026-03-29 14:10:38VUE

Vue实现表格滑动的方法

使用CSS实现横向滚动

在表格外层容器设置固定宽度和overflow-x: auto,确保内容超出时出现滚动条。表格宽度需大于容器宽度才能触发滚动。

<div class="table-container">
  <table class="scrollable-table">
    <!-- 表格内容 -->
  </table>
</div>
.table-container {
  width: 100%;
  overflow-x: auto;
  white-space: nowrap;
}
.scrollable-table {
  min-width: 800px; /* 大于容器宽度 */
}

使用第三方库(如vxe-table)

安装vxe-table库后,可直接使用内置的滚动功能:

vue实现表格滑动

npm install vxe-table
<template>
  <vxe-table
    :data="tableData"
    border
    height="300px" /* 固定高度触发纵向滚动 */
    :scroll-x="{ gt: 0 }" /* 横向滚动配置 */
  >
    <vxe-column type="index"></vxe-column>
    <!-- 其他列定义 -->
  </vxe-table>
</template>

自定义指令实现拖动滚动

通过Vue指令监听鼠标事件实现拖动滚动效果:

vue实现表格滑动

Vue.directive('scroll', {
  bind(el) {
    let isDown = false;
    let startX;
    let scrollLeft;

    el.addEventListener('mousedown', (e) => {
      isDown = true;
      startX = e.pageX - el.offsetLeft;
      scrollLeft = el.scrollLeft;
    });

    el.addEventListener('mouseleave', () => isDown = false);
    el.addEventListener('mouseup', () => isDown = false);

    el.addEventListener('mousemove', (e) => {
      if (!isDown) return;
      e.preventDefault();
      const x = e.pageX - el.offsetLeft;
      const walk = (x - startX) * 2;
      el.scrollLeft = scrollLeft - walk;
    });
  }
});
<div v-scroll class="scroll-container">
  <!-- 可拖动滚动的内容 -->
</div>

移动端触摸滚动优化

针对移动设备添加触摸事件支持:

el.addEventListener('touchstart', (e) => {
  isDown = true;
  startX = e.touches[0].pageX - el.offsetLeft;
  scrollLeft = el.scrollLeft;
});

el.addEventListener('touchend', () => isDown = false);

el.addEventListener('touchmove', (e) => {
  if (!isDown) return;
  const x = e.touches[0].pageX - el.offsetLeft;
  const walk = (x - startX) * 2;
  el.scrollLeft = scrollLeft - walk;
});

性能优化建议

对于大数据量表格,建议配合虚拟滚动技术(如vue-virtual-scroller)使用:

npm install vue-virtual-scroller
<template>
  <RecycleScroller
    class="scroller"
    :items="tableData"
    :item-size="50"
    key-field="id"
  >
    <template v-slot="{ item }">
      <!-- 渲染单行内容 -->
    </template>
  </RecycleScroller>
</template>

标签: 表格vue
分享给朋友:

相关文章

vue实现app

vue实现app

Vue 实现 App 的常见方法 使用 Vue 开发移动端 App 主要有两种主流方案:混合开发(Hybrid)和原生渲染。以下是具体实现方式和工具链: 混合开发方案(WebView 嵌入) 通过…

vue 实现pdf

vue 实现pdf

在Vue中实现PDF功能 在Vue项目中实现PDF功能通常涉及PDF生成、预览或下载。以下是几种常见实现方式: 使用vue-pdf库预览PDF 安装依赖: npm install vue-pdf…

vue实现switch

vue实现switch

Vue 实现 Switch 开关组件 在 Vue 中实现 Switch 开关组件可以通过自定义组件或使用现有 UI 库完成。以下是几种常见实现方式: 自定义 Switch 组件 创建一个基础 Sw…

分页实现vue

分页实现vue

分页实现(Vue) 在Vue中实现分页功能通常需要结合前端分页逻辑和后端API支持。以下是两种常见的实现方式: 前端分页实现 适用于数据量较小的情况,直接在客户端完成分页逻辑。 <templ…

vue 实现筛选

vue 实现筛选

实现筛选功能的基本方法 在Vue中实现筛选功能通常涉及以下几个核心步骤: 数据绑定与筛选逻辑 使用v-model绑定筛选条件到Vue实例的数据属性,结合计算属性实现动态筛选: data() {…

vue实现swipe

vue实现swipe

Vue实现Swipe功能的方法 使用第三方库(推荐) Vue生态中有多个成熟的轮播/滑动组件库,例如vue-awesome-swiper或swiper/vue。以下是基于swiper/vue的实现示例…