更新记录

v1.0.1(2025-06-10) 下载此版本

修复拖拽过程中卡住问题

v1.0.0(2025-02-18) 下载此版本

v1.0.0


平台兼容性

uni-app(4.01)

Vue2 Vue3 Chrome Safari app-vue app-nvue Android iOS 鸿蒙
- - - -
微信小程序 支付宝小程序 抖音小程序 百度小程序 快手小程序 京东小程序 鸿蒙元服务 QQ小程序 飞书小程序 快应用-华为 快应用-联盟
- - - - - - - - - -

uni-app x(4.01)

Chrome Safari Android iOS 鸿蒙 微信小程序
- - - - - -

其他

多语言 暗黑模式 宽屏模式
× ×

DraggableList 拖拽排序组件

一个基于 uni-app 的轻量级拖拽排序列表组件

支持流畅的拖拽动画和自动排序功能。

功能特点

  • 🚀 流畅的拖拽动画效果
  • 📱 完美支持移动端触摸操作
  • 🎯 精确的位置计算和自动排序
  • 💫 平滑的过渡动画
  • 🔒 智能的边界处理
  • 🎨 可自定义样式
  • 📦 零依赖,轻量化实现

安装使用

  1. 复制 DraggableList 组件到你的项目中。
  2. 在页面中引入并使用:
<template>
  <DraggableList :list="menuList" @update="onListUpdate" />
</template>

<script>
import DraggableList from "../components/DraggableList/DraggableList.vue";

export default {
  components: {
    DraggableList,
  },
  data() {
    return {
      menuList: [
        { id: 1, text: "微信", icon: "../../static/微信.svg" },
        { id: 2, text: "支付宝", icon: "../../static/支付宝支付.svg" },
        { id: 3, text: "建设银行", icon: "../../static/建设银行.svg" },
        { id: 4, text: "工商银行", icon: "../../static/工商银行.svg" },
        { id: 5, text: "农业银行", icon: "../../static/中国农业银行.svg" },
      ],
    };
  },
  methods: {
    onListUpdate(newList) {
      this.menuList = newList;
    },
  },
};
</script>

API 文档

Props

属性 类型 必填 说明
list Array 列表数据

列表项数据格式

interface ListItem {
  id: number | string; // 唯一标识
  text: string; // 显示文本
  icon?: string; // 图标路径(可选)
}

实现原理

触摸处理

  • 监听 touchstarttouchmovetouchend 事件。
  • 计算触摸点相对位置和移动距离。

位置计算

  • 使用 transform 进行位置变换。
  • 实时计算目标位置和索引。

动画效果

  • 使用 CSS transition 实现平滑过渡。
  • 拖拽时禁用动画以保证响应度。

自动排序

  • 基于当前位置计算目标索引。
  • 使用数组操作实现列表重排。

注意事项

  • 确保列表项都有唯一的 id
  • 建议列表项不要过多(建议不超过 50 个)。
  • icon 路径需要是有效的图片资源。
  • 适配不同屏幕尺寸时注意单位使用 rpx

兼容性

  • 支持所有 uni-app 支持的平台。

隐私、权限声明

1. 本插件需要申请的系统权限列表:

2. 本插件采集的数据、发送的服务器地址、以及数据用途说明:

3. 本插件是否包含广告,如包含需详细说明广告表达方式、展示频率:

许可协议

MIT协议

使用中有什么不明白的地方,就向插件作者提问吧~ 我要提问