更新记录

1.0.2(2026-08-13) 下载此版本

支持滚动 修复兼容问题

1.0.1(2025-12-24) 下载此版本

修复兼容

1.0.0(2025-12-24) 下载此版本

首次发布

查看更多

平台兼容性

uni-app(4.87)

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

uni-app x(4.87)

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

jia-drag 拖拽排序组件

jia-drag 是一款专为 uni-app 开发的高性能拖拽排序组件。它基于内置的 movable-areamovable-view 实现

特性

  • 🚀 高性能:利用原生组件实现,动画流畅不卡顿。
  • 📦 开箱即用:支持 Vue 2 和 Vue 3 (Composition API / script setup)。
  • 🎨 灵活定制:支持插槽自定义内容,满足多样化 UI 需求。
  • 🛠️ 功能丰富:支持长按触发、阻尼设置、摩擦力调整、动画开关。

使用示例 (Vue 3)

<template>
  <view class="container">
    <jia-drag
      v-model="list"
      height="calc(100vh - 44px)"
      itemKey="id"
      itemTextKey="name"
      itemHeight="100rpx"
      @end="handleDragEnd"
    >
      <template #item="{ element, index }">
        <view class="drag-item">
          <text>{{ index + 1 }}. {{ element.name }}</text>
        </view>
      </template>
    </jia-drag>
  </view>
</template>

<script setup>
import { ref } from 'vue';

const list = ref([
  { id: '1', name: '苹果' },
  { id: '2', name: '香蕉' },
  { id: '3', name: '西瓜' },
  { id: '4', name: '葡萄' }
]);

const handleDragEnd = (newList) => {
  console.log('排序后的列表:', newList);
};
</script>

<style scoped>
.container {
  height: calc(100vh - 44px);
  overflow: hidden;
}

.drag-item {
  width: 100%;
  height: 100%;
  display: flex;
  align-items: center;
  padding: 0 30rpx;
  background-color: #ffffff;
  border-bottom: 1rpx solid #eeeeee;
}
</style>

API

Props

属性名 类型 默认值 必填 说明
v-model / value Array - 数据源列表;Vue 3 使用 v-model,Vue 2 使用 value / @input
itemKey String - 每一项数据的唯一标识字段名(如 'id')
itemTextKey String '' 微信小程序默认渲染使用的文本字段;未传时显示 itemKey
itemHeight String 100px 单个元素的高度,支持 pxrpx
height String auto 容器高度;传入具体高度时由组件内部滚动,auto 时由页面滚动
direction String all 拖拽方向,可选 all, vertical, horizontal, none
animation Boolean true 是否开启动画
longpress Boolean true 是否长按触发拖拽(开启可防止与滑动冲突)
damping Number 20 阻尼系数,决定弹回速度
friction Number 5 摩擦力,决定跟手感

Events

事件名 说明 回调参数
@end 拖拽结束且位置发生变化时触发 (list: Array):排序后的新列表
@update:modelValue Vue 3 环境下同步数据源 (list: Array):排序后的新列表
@input Vue 2 环境下同步数据源 (list: Array)

Slots

插槽名 说明 插槽作用域参数
item 自定义每一项的渲染内容 { element, index }:当前项数据及索引

[!IMPORTANT] 微信小程序兼容性说明:由于微信小程序对作用域插槽 (Scoped Slot) 的性能或实现限制,当在微信小程序环境下运行时,组件会回退到默认渲染模式,优先显示 item[itemTextKey],未传 itemTextKey 时显示 item[itemKey]。对于其他平台(H5、App 等),支持完整的插槽自定义。

注意事项

  1. 唯一标识:请务必提供正确的 itemKey,且对应的数据必须是唯一的,否则会导致排序错乱。
  2. 样式建议:建议给 drag-item 设置背景色,否则在拖拽过程中背景可能是透明的。
  3. 滚动容器:列表超出可视区时,传入 height 并限制外层容器高度,可避免页面和组件同时出现纵向滚动条。
  4. 滚动冲突:建议保留 longpress,避免拖拽操作与列表滚动冲突。

如果在使用过程中遇到任何问题,欢迎提出意见!

隐私、权限声明

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

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

插件不采集任何数据

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

许可协议

MIT协议