123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135 |
- <template>
- <view class="content">
- <!-- 参数
- * @property {ObjectArray} list = [] 列表数据,自定义数据,会传递到name="rowContent"插槽
- * @property {Boolean} feedbackGeneratorState = [true|false] 是否开启拖动触感反馈
- * @property {Boolean} isLongTouch = [true|false] 是否开启长按拖动
- * @property {Boolean} isAutoScroll = [true|false] 是否拖拽至边缘自动滚动列表
- * @property {Number} longTouchTime = [] 选填,触发长按时长,单位:ms,默认350ms,不支持微信小程序
- * @property {Number} listHeight = [] 选填,可拖动列表整体的高度,单位:px,默认等于窗口高度
- * @property {Number} rowHeight = [] 必填,行高,单位:px,默认44px
- * @event {Function} change 行位置发生改变时触发事件 返回值:{index:'原始下标',moveTo:'被拖动到的下标',moveRow:'拖动行数据'}
- * @event {Function} confirm 拖拽结束且行位置发生了改变触发事件 返回值:{index:'原始下标',moveTo:'被拖动到的下标',moveRow:'拖动行数据',list:'整个列表拖动后的数据'}
- * @event {Function} onclick 点击行触发事件 返回值:{index:'被点击行下标',value:'被点击行数据'}
- */
- -->
- <!-- 当前属性设置 isLongTouch关闭长按拖动 isAutoScroll开启自动滚动 feedbackGeneratorState开启触感反馈 rowHeight行高55 -->
- <HM-dragSorts :list="list" :isLongTouch="false" :isAutoScroll="true" :feedbackGeneratorState="true" :rowHeight="55" @change="change" @confirm="confirm" @onclick="onclick" >
- <template v-slot:rowContent="{row}">
- <view class="row">
- <image v-if="row.icon" class="icon" :src="row.icon"></image>
- <text class="text">{{row.name}}</text>
- </view>
- </template>
- </HM-dragSorts>
-
- </view>
- </template>
- <script>
- export default {
- data() {
- return {
- /*
- 0.数据结构说明 可以在结构中添加其他的数据,比如id,value等,不影响组件使用,拖动调整顺序后,组件会把传入的数据排序后原封不动在@confirm中返回。
-
- 1.动态修改list数据,组件会响应变化,但拖动排序不会影响list,
- 所以,要特别注意,在动态修改list数据时候,由于组件内数据可能已经拖动重新排序过,页面的list顺序和组件内数据顺序不一致了,
- 最好在操作list时候,先和@confirm返回的值同步一下,或者直接操作@confirm返回的值,然后赋值给list。
-
- n.最后,组件你下载了,代码你也看了,不给个五星好评,我可要打人了啊 (╬ ̄皿 ̄)=○ ヽ(#`Д´)ノ
- */
- list: [
- {
- "name": "常用应用1",
- "icon": "https://cdn.colorhub.me/ySJOhzQwb6w596c0lDqLQkzET8-ygzR7wsjL83Zzgj0/rs:fill:280:280:0/g:sm/bG9jYWw6Ly8vNmUv/ODcvYTAxMjg4YjVj/N2I1ZTJhOGQ0NmFl/NWU5ODMzNmY0YjFm/NDBhNmU4Ny5qcGVn.jpg",
- },
- {
- "name": "常用应用2",
- "icon": "https://cdn.colorhub.me/zu3g7Ra09-XfSrAWZBmnG2zKNtUj2iTb-pPa0UmBOmM/rs:fill:280:280:0/g:sm/bG9jYWw6Ly8vY2Uv/OWIvYTE0YmE1ODE0/NTk1NzFkZDBjZmVm/NWJkNWRlMmQ2Nzhj/YTVkY2U5Yi5qcGVn.jpg"
- },
- {
- "name": "常用应用3",
- "icon": "https://cdn.colorhub.me/gwKooJQs_cuEcYPAXki4mIj0QQokmfoK9F7CcnylPY4/rs:fill:280:280:0/g:sm/bG9jYWw6Ly8vNGQv/NTUvY2Y4Njc1ZTdi/ZWRkYjgzMWQzMWEx/MjUxY2U2Y2FjZmE3/NmU5NGQ1NS5qcGVn.jpg"
- },
- {
- "name": "常用应用(0001)",
- "icon": "https://cdn.colorhub.me/nxoruPZz2k8PIvdAOR7RPo_kI_o87nj9CEksLl_KUSE/rs:fill:280:280:0/g:sm/bG9jYWw6Ly8vNzIv/YWQvZmY2NzYzNWNh/ZGU3NTM1NTA5MzI0/MzAwYmI0M2QzZmNm/MDNkNzJhZC5qcGVn.jpg"
- },
- {
- "name": "常用应用(4401)",
- "icon": "https://cdn.colorhub.me/RBhjyJQzsDku2m0dCRcAp-OAuvg1ACu6AA7DWLgKRu0/rs:auto:280:0:0/g:ce/bG9jYWw6Ly8vMzcv/M2QvNTU3MzA4NzQy/OTA5YjIwOTExMDI3/N2ZlMmRiNjYyMTVk/YmJiMzczZC5qcGVn.jpg"
- },
- {
- "name": "常用应用(7223)",
- "icon": "https://cdn.colorhub.me/l33TcVYcCQvkB5LW8IFC2hkfhjPWfrTcL2sOHcrVzho/rs:auto:280:0:0/g:ce/bG9jYWw6Ly8vM2Uv/OGEvZTk4NjE3MTE3/NTQyNTc1NDVhZmQ0/YmYwMDQ5YTYyNTQ0/MDIxM2U4YS5qcGVn.jpg"
- }
-
- ],
- ispush:false
-
- }
- },
- onLoad() {
-
- },
- methods: {
- onclick(e){
- console.log('=== onclick start ===');
- console.log("被点击行: " + JSON.stringify(e.value));
- console.log("被点击下标: " + JSON.stringify(e.index));
- console.log('=== onclick end ===');
-
-
- // uni.showActionSheet({
- // itemList: ['移除常用'],
- // success: function (res) {
- // console.log('选中了第' + (res.tapIndex + 1) + '个按钮');
- // },
- // fail: function (res) {
- // console.log(res.errMsg);
- // }
- // });
- },
- 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("this.list: ",this.list);
- console.log("e.list: ",e.list);
- console.log('=== confirm start ===');
- console.log("被拖动行: " + JSON.stringify(e.moveRow));
- console.log('原始下标:',e.index);
- console.log('移动到:',e.moveTo);
- console.log('=== confirm end ===');
- }
- }
- }
- </script>
- <style lang="scss" scoped>
- //scoped css只在当前页生效 不影响子组件
- page {
- // background-color: #efeff4;
- }
-
- .content {
- .row{
- display: flex;
- flex-direction: row;
- align-items: center;
- .icon{
- width: 30px;
- height: 30px;
- border-radius: 6px;
- margin-right: 13px;
- }
- .text{
- font-size: 13px;
- }
- }
- }
-
- </style>
|