更新记录
1.0.1(2025-08-10) 下载此版本
完善细节和文档
1.0.0(2025-08-08) 下载此版本
支持鸿蒙Next拖动排序
平台兼容性
云端兼容性
阿里云 | 腾讯云 | 支付宝云 |
---|---|---|
√ | √ | × |
uni-app(4.27)
Vue2 | Vue3 | Chrome | Safari | app-vue | app-nvue | Android | iOS | 鸿蒙 |
---|---|---|---|---|---|---|---|---|
√ | √ | √ | √ | √ | - | √ | √ | √ |
微信小程序 | 支付宝小程序 | 抖音小程序 | 百度小程序 | 快手小程序 | 京东小程序 | 鸿蒙元服务 | QQ小程序 | 飞书小程序 | 快应用-华为 | 快应用-联盟 |
---|---|---|---|---|---|---|---|---|---|---|
√ | - | - | - | - | - | - | - | - | - | - |
hcd-dragsort 拖动排序
组件说明
- 这是一个传入列表数据会生成一个可拖动排序列表的组件;
- 只支持单列多行;
- 由于没有插槽,行的样式需要自行从内部去修改;
- 拖动会有触感反馈,如果设备支持的话(鸿蒙 Next 不支持);
- 组件使用了 wxs,兼容APP-VUE、H5、MP-WEIXIN,使用了 renderjs 兼容 APP-HARMONY;
- 组件是在HM-dragSorts的基础上进行修改的;
属性说明
属性名 | 类型 | 说明 |
---|---|---|
list | ObjectArray | 必填,列表数据,数据格式请参考示例,注意:数据非双向绑定,拖动并不会直接修改list数据,排序过的数据在confirm中获取 |
height | Int | 选填,整个列表的高度,默认等于窗口高度 |
rowHeight | Int | 选填,每一行的高度,单位:px,默认44px |
feedbackGenerator | Boolean | 选填,是否开启拖动触感反馈,可选值true/false,默认true 开启 |
longTouch | Boolean | 选填,是否长按拖动,可选值true/false,默认false 关闭,如果是整行拖拽,请开启长按拖拽,不然页面不能滚动 |
longTouchTime | Int | 选填,触发长按时长,单位:ms,默认350ms |
autoScroll | Boolean | 选填,是否拖拽至边缘自动滚动列表,可选值true/false,默认true 开启 |
@confirm | EventHandle | 拖拽结束且行位置发生了改变,触发confirm事件,event = {index:'原始下标',moveTo:'被拖动到的下标',moveRow:'拖动行数据',list:'整个列表拖动后的数据'} |
@change | EventHandle | 拖拽过程中,行位置发生交换时,触发change事件,event = {index:'原始下标',moveTo:'被拖动到的下标',moveRow:'拖动行数据'} |
内置函数说明
push,unshift,splice函数
内置了push,unshift,splice函数,组件设置ref属性,通过$refs调用,实现列表的删除插入,使用方法和数组的push,unshift,splice一致,push,unshift,splice函数修改后会返回修改后的值
例如:
let tmplist = this.$refs.dragSorts.splice(5,1,...rows);
使用示例
页面:
<template>
<view>
<hcd-dragsort
ref="dragSorts"
:height="dragHeight"
:list="dataList"
:rowHeight="60"
:feedbackGenerator="true"
@confirm="confirmSort"></hcd-dragsort>
</view>
</template>
script:
<script>
import HcdDragsort from '/path/hcd-dragsort.vue';
export default {
components: {
HcdDragsort,
},
data() {
return {
dragHeight: 0,
dataList: []
}
},
onLoad() {
var systemInfo = uni.getSystemInfoSync();
console.log(systemInfo);
var statusBarHeight = systemInfo.statusBarHeight;
var navigationHeight = statusBarHeight + 44;
this.dragHeight = systemInfo.screenHeight - navigationHeight;
for (var i = 1; i < 100; i++) {
this.dataList.push({
name: i + ''
})
}
},
methods: {
confirmSort(e) {
console.log(e)
},
changeSort(e) {
console.log(e)
}
}
}
</script>