更新记录
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-area 和 movable-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 等),支持完整的插槽自定义。
注意事项
- 唯一标识:请务必提供正确的
itemKey,且对应的数据必须是唯一的,否则会导致排序错乱。
- 样式建议:建议给
drag-item 设置背景色,否则在拖拽过程中背景可能是透明的。
- 滚动冲突:如果页面本身有滚动条,建议开启
longpress 参数,以避免拖拽操作与页面滚动混淆。
如果在使用过程中遇到任何问题,欢迎提出意见!