更新记录

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"
      itemKey="id"
      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>
.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 [] 数据源列表
itemKey String - 每一项数据的唯一标识字段名(如 'id')
itemHeight String 100px 单个元素的高度(支持 px)
height String auto 容器总高度,默认根据 item 数量自动扩充
direction String all 拖拽方向,可选 all, vertical, horizontal, none
animation Boolean true 是否开启动画
longpress Boolean true 是否长按触发拖拽(开启可防止与滑动冲突)
damping Number 20 阻尼系数,决定弹回速度
friction Number 5 摩擦力,决定跟手感

Events

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

Slots

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

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

注意事项

  1. 唯一标识:请务必提供正确的 itemKey,且对应的数据必须是唯一的,否则会导致排序错乱。
  2. 样式建议:建议给 drag-item 设置背景色,否则在拖拽过程中背景可能是透明的。
  3. 滚动冲突:如果页面本身有滚动条,建议开启 longpress 参数,以避免拖拽操作与页面滚动混淆。

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

隐私、权限声明

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

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

插件不采集任何数据

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

许可协议

MIT协议