更新记录
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-area 和 movable-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 |
否 | 单个元素的高度,支持 px 和 rpx |
| 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 等),支持完整的插槽自定义。
注意事项
- 唯一标识:请务必提供正确的
itemKey,且对应的数据必须是唯一的,否则会导致排序错乱。 - 样式建议:建议给
drag-item设置背景色,否则在拖拽过程中背景可能是透明的。 - 滚动容器:列表超出可视区时,传入
height并限制外层容器高度,可避免页面和组件同时出现纵向滚动条。 - 滚动冲突:建议保留
longpress,避免拖拽操作与列表滚动冲突。
如果在使用过程中遇到任何问题,欢迎提出意见!

收藏人数:
下载插件并导入HBuilderX
赞赏(1)
下载 432
赞赏 3
下载 12635235
赞赏 1950
赞赏
京公网安备:11010802035340号