更新记录
1.3.8(2024-10-10)
下载此版本
兼容微信小程序使用slot会多一层view的处理
1.3.7(2024-10-10)
下载此版本
兼容微信小程序使用slot会多一层view的处理
1.3.6(2024-10-09)
下载此版本
兼容微信小程序使用slot会多一层view的处理
查看更多
平台兼容性
App |
快应用 |
微信小程序 |
支付宝小程序 |
百度小程序 |
字节小程序 |
QQ小程序 |
HBuilderX 3.1.0 app-vue app-nvue |
× |
√ |
× |
× |
× |
× |
钉钉小程序 |
快手小程序 |
飞书小程序 |
京东小程序 |
× |
× |
× |
× |
H5-Safari |
Android Browser |
微信浏览器(Android) |
QQ浏览器(Android) |
Chrome |
IE |
Edge |
Firefox |
PC-Safari |
14.0.2 |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
√ |
拖拽列表
可自动排序拖拽,或者脱至指定下标进行指定换位
leo-drag 拖拽排序 说明
基于uniapp vue3,使用了movable-area和movable-view内置组件实现移动和过度动画,兼容APP-VUE、H5、MP-WEIXIN。
! 注意: 在APP-NVUE中,初次加载组件会闪烁一下。有不好体验还请见谅。
安装
简单DOM,更多请看下方API
<!-- 如果使用v-model传递list,则拖动完毕自动更新数据位置,否则使用@getList事件获取到最新拖动的值 -->
<leo-drag :column="3" ref="myDrop" @getList="getDropList" v-model:list="dragAndDrop">
<template #content={data}>
<!-- 根据data.activeIndex 判断是否为当前拖动的元素,自定义添加样式 -->
<view class="drop" :style="[{'transform':data.index === data.activeIndex?'scale(1.05)':'scale(1)',}]">
<view class="flex flex-center" style="background-color: aqua;">
<view class="ellipsis">
{{data.name}}123456789123456789123456789
</view>
<uni-icons class="flex-none" @touchstart="touchstart(data.index)" style="margin-left: auto;" type="bars" size="30"></uni-icons>
</view>
</view>
</template>
</leo-drag>
export default {
data() {
return {
dragAndDrop:[ // 列表数据
{name:"元素1"},
{name:"元素2"},
{name:"元素3"},
{name:"元素4"},
{name:"元素5"},
{name:"元素6"},
{name:"元素7"},
],
}
},
methods:{
getDropList(list){
// 拖拽完毕后获取到的数据
console.log(list,"eeee")
},
touchstart(i){
// 默认是长按才能拖动,可根据需求,通过触摸拖动元素
this.$refs.myDrop.handleLongpress(i);
},
changeList(){
// 如果新增或者删除了数据,请调用此函数
let list = this.dragAndDrop;
this.$refs.myDrop.initList(list,true);
}
}
}
增删
- 因为传递数据和组件数据进行了区分。
- 所以无论是添加或者删除,都需要调用this.$refs.myDrop.initList(list,true)方法重置列表。
- 保证数据的统一性
查看示例
<!-- // 代码位于 uni_modules/leo-drag/compoents/leo-drag -->
<leo-drag />
API
Props
参数 |
说明 |
类型 |
默认值 |
list |
列表数组,变化需要调用内部的initList函数化 |
Array |
[] |
column |
列数 |
Number |
1 |
height |
可拖动区域的高度,默认是auto,将根据itemHeight适配高度 |
String |
auto |
itemHeight |
拖动元素的高度,默认是auto,会通过计算每个item的最高值决定整体的高度 |
String |
auto |
damping |
阻尼系数,用于控制x或y改变时的动画和过界回弹的动画,值越大移动越快 |
Number |
20 |
direction |
默认all,可选值:vertical(垂直),horizontal(水平) |
Boolean |
all |
animation |
拖动时开启动画 |
Boolean |
true |
damping |
用于控制x或y改变时的动画和过界回弹的动画 |
Number |
20 |
disabled |
是否禁用 |
Boolean |
false |
swapMode |
替换模式:true:指定位置全部元素后移,false:拖拽到指定位置互换 |
Boolean |
false |
slotContentStyle |
自定义slotContent属性 自定义样式 |
Object |
{} |
supportLongpress |
是否支持长按拖拽 |
Boolean |
false |
isStopPropagation |
是否反正冒泡 |
Boolean |
false |
Events
事件名 |
说明 |
参数 |
@getList |
拖拽后返回的新数据 |
list |
@getViewStyle |
获取item宽高 |
Object |
@getAreaStyle |
获取可拖拽区域宽高 |
Object |
@getItemHeight |
获取item高度 |
Object |
@handleDragEnd |
拖拽结束事件 |
|
this.$refs.leoDrag.initList(newList,false) |
初始化时调用,当height为auto时,需要传递第二个参数为true |
参数1:新数组; 参数2:是否更新高度 |
this.$refs.leoDrag.updataList(newList) |
更新数据:注意,新增数据和删除数据都不应该调用此函数,并且此函数不会更新每个item的高度 |
参数1:新数组; |
打赏
如果你觉得本插件,解决了你的问题,赠人玫瑰,手留余香。