当前位置:首页 > uni-app

uniapp拖动表格

2026-02-06 05:08:43uni-app

uniapp 实现拖动表格的方法

在 uniapp 中实现表格的拖动功能,可以通过以下几种方式实现:

使用 movable-viewmovable-area 组件

movable-viewmovable-area 是 uniapp 提供的可拖动组件,适合实现简单的拖动功能。

<template>
  <movable-area style="width: 100%; height: 100vh;">
    <movable-view 
      v-for="(item, index) in tableData" 
      :key="index"
      direction="all"
      :x="item.x"
      :y="item.y"
      @change="onChange(index, $event)"
    >
      {{ item.text }}
    </movable-view>
  </movable-area>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { text: 'Item 1', x: 0, y: 0 },
        { text: 'Item 2', x: 100, y: 100 },
      ]
    }
  },
  methods: {
    onChange(index, e) {
      this.tableData[index].x = e.detail.x
      this.tableData[index].y = e.detail.y
    }
  }
}
</script>

使用第三方库 sortablejs

sortablejs 是一个功能强大的拖拽排序库,可以轻松实现表格行的拖动排序。

  1. 安装 sortablejs

    npm install sortablejs --save
  2. 在页面中使用:

    
    <template>
    <view>
     <view id="table">
       <view 
         v-for="(item, index) in tableData" 
         :key="item.id"
         class="table-row"
       >
         {{ item.text }}
       </view>
     </view>
    </view>
    </template>
import Sortable from 'sortablejs'

export default { data() { return { tableData: [ { id: 1, text: 'Row 1' }, { id: 2, text: 'Row 2' }, ] } }, mounted() { const el = document.getElementById('table') new Sortable(el, { animation: 150, onEnd: (evt) => { const { oldIndex, newIndex } = evt const movedItem = this.tableData.splice(oldIndex, 1)[0] this.tableData.splice(newIndex, 0, movedItem) } }) } }

.table-row { padding: 10px; border: 1px solid #eee; margin-bottom: 5px; } ```

使用 touch 事件手动实现拖动

通过监听 touchstarttouchmovetouchend 事件,可以手动实现拖动效果。

<template>
  <view>
    <view 
      v-for="(item, index) in tableData" 
      :key="index"
      class="draggable-item"
      @touchstart="handleTouchStart(index, $event)"
      @touchmove="handleTouchMove(index, $event)"
      @touchend="handleTouchEnd"
      :style="{ transform: `translate(${item.x}px, ${item.y}px)` }"
    >
      {{ item.text }}
    </view>
  </view>
</template>

<script>
export default {
  data() {
    return {
      tableData: [
        { text: 'Item 1', x: 0, y: 0, isDragging: false },
        { text: 'Item 2', x: 0, y: 50, isDragging: false },
      ],
      startX: 0,
      startY: 0
    }
  },
  methods: {
    handleTouchStart(index, e) {
      this.tableData[index].isDragging = true
      this.startX = e.touches[0].clientX - this.tableData[index].x
      this.startY = e.touches[0].clientY - this.tableData[index].y
    },
    handleTouchMove(index, e) {
      if (!this.tableData[index].isDragging) return
      this.tableData[index].x = e.touches[0].clientX - this.startX
      this.tableData[index].y = e.touches[0].clientY - this.startY
    },
    handleTouchEnd(index) {
      this.tableData[index].isDragging = false
    }
  }
}
</script>

<style>
.draggable-item {
  position: absolute;
  width: 100px;
  height: 40px;
  background-color: #f0f0f0;
  border: 1px solid #ccc;
  display: flex;
  align-items: center;
  justify-content: center;
}
</style>

注意事项

  • 在移动端使用拖动功能时,需注意触摸事件的兼容性。
  • 使用 sortablejs 时,需确保 DOM 元素已渲染完成后再初始化。
  • 拖动性能优化:对于大量数据,建议使用虚拟滚动技术(如 uni-list)减少渲染压力。

以上方法可根据实际需求选择,movable-view 适合简单拖动,sortablejs 适合复杂排序,手动实现则提供最大灵活性。

uniapp拖动表格

标签: 拖动表格
分享给朋友:

相关文章

css表格制作表格

css表格制作表格

CSS 表格制作方法 使用 CSS 创建表格可以通过多种方式实现,包括原生 HTML 表格元素结合 CSS 样式,或者使用纯 CSS 布局技术(如 Flexbox 或 Grid)模拟表格效果。以下是常…

使用vue实现表格

使用vue实现表格

使用 Vue 实现表格 在 Vue 中实现表格可以通过多种方式完成,以下是一个基于 Vue 3 的示例,展示如何动态渲染表格数据并支持基础功能(如排序、筛选)。 基础表格实现 通过 v-for 循…

css怎么制作表格

css怎么制作表格

使用HTML和CSS创建表格 HTML提供<table>标签用于创建表格结构,结合CSS可以自定义样式。以下是基本实现方法: HTML结构 <table> <th…

怎么制作css表格

怎么制作css表格

使用HTML和CSS创建表格 HTML提供<table>标签用于创建表格结构,CSS用于控制样式。以下是一个基础示例: <table class="styled-table">…

css好看的表格制作

css好看的表格制作

使用CSS制作美观表格的方法 边框与间距优化 通过border-collapse属性合并边框,避免双边框效果。设置padding增加单元格内边距,提升可读性。 table { border…

vue实现表格复选

vue实现表格复选

实现表格复选的基本思路 在Vue中实现表格复选功能,通常需要结合v-model绑定选中状态,监听复选框变化事件,以及维护一个选中项的数组。以下是具体实现方法: 基础实现步骤 数据准备 定义表格数据…