jiuyiUniapp/jiuyi2/uni_modules/HM-dragSorts
sx 52674c2052 合并代码 2025-01-14 20:37:57 +08:00
..
components/HM-dragSorts 合并代码 2025-01-14 20:37:57 +08:00
changelog.md 合并代码 2025-01-14 20:37:57 +08:00
package.json 合并代码 2025-01-14 20:37:57 +08:00
readme.md 合并代码 2025-01-14 20:37:57 +08:00

readme.md

##组件说明

  • 这是一个传入列表数据会生成一个可拖动排序列表的组件
  • 此组件只支持单列多行UVUE版本支持了多行多列可以去看看传送门
  • 因为废弃了插槽,所以,行的样式需要自行到组件内部去修改
  • 行内容可以自行到组件,组件只支持每行都相等高度的列表
  • 拖动会有触感反馈,如果设备支持的话。
  • 组件使用了wxs兼容APP-VUE、H5、MP-WEIXIN其他端未做兼容不支持。
  • [BUG] vue3下只支持长按拖拽
  • 下载示例并运行,你的很多疑问或得到答案。

###属性说明

属性名 类型 说明
list ObjectArray 必填,列表数据,数据格式请参考示例,
注意:数据非双向绑定拖动并不会直接修改list数据排序过的数据在confirm中获取
rowHeight Int 选填,每一行的高度,单位:px默认44px
listHeight Int 选填,整个列表的高度,默认等于窗口高度
listBackgroundColor String 选填,列表底色,注意是列表的底色,不是行的底色,默认#FFFFFF
feedbackGenerator Boolean 选填是否开启拖动触感反馈可选值true/false默认true 开启
longTouch Boolean 选填是否长按拖动可选值true/false默认false 关闭,如果是整行拖拽,请开启长按拖拽,不然页面不能滚动
autoScroll Boolean 选填是否拖拽至边缘自动滚动列表可选值true/false默认true 开启
longTouchTime Int 选填,触发长按时长,单位:ms默认350ms
@onclick EventHandle 点击事件返回被点击行的数据event = {index:被点击行的下标,row:被点击行的数据}
@confirm EventHandle 拖拽结束且行位置发生了改变触发confirm事件event = {index:'原始下标',moveTo:'被拖动到的下标',moveRow:'拖动行数据',list:'整个列表拖动后的数据'}
@change EventHandle 拖拽过程中行位置发生交换时触发change事件event = {index:'原始下标',moveTo:'被拖动到的下标',moveRow:'拖动行数据'}

###内置函数说明

####pushunshiftsplice函数 内置了pushunshiftsplice函数组件设置ref属性通过$refs调用实现列表的删除插入使用方法和数组的pushunshiftsplice一致pushunshiftsplice函数修改后会返回修改后的值
例如:

let tmplist = this.$refs.dragSorts.splice(5,1,...rows);

##使用示例
页面:

<template>
	<view class="content">
		<HM-dragSorts ref="dragSorts"  :list="list" :autoScroll="true" :feedbackGenerator="true" :listHeight="300" :rowHeight="55" @change="change" @confirm="confirm" @onclick="onclick" ></HM-dragSorts>	
	</view>
</template>
<style lang="scss" scoped>
	//scoped css只在当前页生效 不影响子组件
	page {background-color: #efeff4;}
</style>

script:

	import dragSorts from '@/uni_modules/components/HM-dragSorts/HM-dragSorts.vue' // 组件符合easycom规范默认这个可以不写
	export default {
		components: {'HM-dragSorts':dragSorts},// 组件符合easycom规范默认这个可以不写
		data() {
			return {
				list:[
					{"name": "花呗", "icon": "/static/img/1.png"},
					{"name": "余额宝","icon": "/static/img/2.png"},
					{"name": "账户余额","icon": "/static/img/3.png"},
					{"name": "交通银行信用卡(0001)""icon": "/static/img/4.png"},
					{"name": "中国建设银行信用卡(4401)","icon": "/static/img/5.png"},
					{"name": "网商储蓄卡(7223)","icon": "/static/img/6.png"}
				]
			}
		},
		methods: {
			push(){
				// 和数组的push使用方法一致可以push单行也可以push多行
				this.$refs.dragSorts.push({
						"name": "push行",
						"icon": "/static/img/2.png"
					});
			},
			unshift(){
				// 和数组的unshift使用方法一致可以unshift单行也可以unshift多行
				this.$refs.dragSorts.unshift({
						"name": "unshift行",
						"icon": "/static/img/2.png"
					});
			},
			splice(){
				// 和数组的unshift使用方法一致 下标1开始删除1个并在下标1位置插入行
				this.$refs.dragSorts.splice(1,1,{
						"name": "splice行",
						"icon": "/static/img/2.png"
					});
			},
			onclick(e){
				console.log('=== onclick start ===');
				console.log("被点击行: " + JSON.stringify(e.value));
				console.log("被点击下标: " + JSON.stringify(e.index));
				console.log('=== onclick end ===');
			},
			change(e){
				console.log('=== change start ===');
				console.log("被拖动行: " + JSON.stringify(e.moveRow));
				console.log('原始下标:',e.index);
				console.log('移动到:',e.moveTo);
				console.log('=== change end ===');
			},
			confirm(e){
				console.log('=== confirm start ===');
				console.log("被拖动行: " + JSON.stringify(e.moveRow));
				console.log('原始下标:',e.index);
				console.log('移动到:',e.moveTo);
				console.log('=== confirm end ===');
			}
		}
	}

###更多的说明请下载示例运行查看,有示例对照注释更容易明白。