SwipeAction 滑动操作

该组件一般用于左滑唤出操作菜单的场景,用的最多的是左滑删除操作。

注意

如果把该组件通过v-for用于左滑删除的列表,请保证循环的:key是一个唯一值,可以用数据的id或者title替代。 不能是数组循环的index,否则删除的时候,可能会出现数据错乱

平台差异说明

AppH5微信小程序支付宝小程序百度小程序头条小程序QQ小程序

基本使用

  • 通过slot传入内部内容即可,可以将v-for的”index”索引值传递给index参数,用于点击时,在回调方法中对某一个数据进行操作(点击回调时第一个参数会返回此索引值)
  • 内部的按钮通过options参数配置,此参数为一个数组,元素为对象,可以配置按钮的文字,背景颜色(建议只配置此两个参数即可),请勿配置宽高等属性

说明:有时候,我们在打开一个swipeAction的同时,需要自动关闭其他的swipeAction,这时需要通过open事件实现,见如下:

  1. <template>
  2. <view>
  3. <u-swipe-action :show="item.show" :index="index"
  4. v-for="(item, index) in list" :key="item.id"
  5. @click="click" @open="open"
  6. :options="options"
  7. >
  8. <view class="item u-border-bottom">
  9. <image mode="aspectFill" :src="item.images" />
  10. <!-- 此层wrap在此为必写的,否则可能会出现标题定位错误 -->
  11. <view class="title-wrap">
  12. <text class="title u-line-2">{{ item.title }}</text>
  13. </view>
  14. </view>
  15. </u-swipe-action>
  16. </view>
  17. </template>
  18. <script>
  19. export default {
  20. data() {
  21. return {
  22. list: [
  23. {
  24. id: 1,
  25. title: '长安回望绣成堆,山顶千门次第开,一骑红尘妃子笑,无人知是荔枝来',
  26. images: 'https://cdn.uviewui.com/uview/common/logo.png',
  27. show: false
  28. },
  29. {
  30. id: 2,
  31. title: '新丰绿树起黄埃,数骑渔阳探使回,霓裳一曲千峰上,舞破中原始下来',
  32. images: 'https://cdn.uviewui.com/uview/common/logo.png',
  33. show: false
  34. },
  35. {
  36. id: 3,
  37. title: '登临送目,正故国晚秋,天气初肃。千里澄江似练,翠峰如簇',
  38. images: 'https://cdn.uviewui.com/uview/common/logo.png',
  39. show: false,
  40. }
  41. ],
  42. disabled: false,
  43. btnWidth: 180,
  44. show: false,
  45. options: [
  46. {
  47. text: '收藏',
  48. style: {
  49. backgroundColor: '#007aff'
  50. }
  51. },
  52. {
  53. text: '删除',
  54. style: {
  55. backgroundColor: '#dd524d'
  56. }
  57. }
  58. ]
  59. };
  60. },
  61. methods: {
  62. click(index, index1) {
  63. if(index1 == 1) {
  64. this.list.splice(index, 1);
  65. this.$u.toast(`删除了第${index}个cell`);
  66. } else {
  67. this.list[index].show = false;
  68. this.$u.toast(`收藏成功`);
  69. }
  70. },
  71. // 如果打开一个的时候,不需要关闭其他,则无需实现本方法
  72. open(index) {
  73. // 先将正在被操作的swipeAction标记为打开状态,否则由于props的特性限制,
  74. // 原本为'false',再次设置为'false'会无效
  75. this.list[index].show = true;
  76. this.list.map((val, idx) => {
  77. if(index != idx) this.list[idx].show = false;
  78. })
  79. }
  80. }
  81. };
  82. </script>
  83. <style lang="scss" scoped>
  84. .item {
  85. display: flex;
  86. padding: 20rpx;
  87. }
  88. image {
  89. width: 120rpx;
  90. flex: 0 0 120rpx;
  91. height: 120rpx;
  92. margin-right: 20rpx;
  93. border-radius: 12rpx;
  94. }
  95. .title {
  96. text-align: left;
  97. font-size: 28rpx;
  98. color: $u-content-color;
  99. margin-top: 20rpx;
  100. }
  101. </style>

修改按钮样式

  • 通过options参数配置按钮的数量和样式,见上方说明
  • 通过btn-width设置按钮的宽度,单位rpx
  1. <u-swipe-action btn-width="180" :options="options">
  2. ...
  3. </u-swipe-action>

点击事件

click点击事件回调中,有两个参数,第一个参数为通过Props传入的index参数,第二个参数为滑动按钮的索引,即options数组的索引, 用于标识第几个按钮被点击。

API

Props

参数说明类型默认值可选值
bg-color整个组件背景颜色String#ffffff-
index标识符,点击时候用于区分点击了哪一个,用v-for循环时的index即可String | Number--
btn-width按钮宽度,单位rpxString | Number180-
disabled是否禁止某个swipeAction滑动Booleanfalsetrue
vibrate-short是否使手机发生短促震动,目前只在iOS的微信小程序和微信小程序开发工具有效Booleanfalsetrue
show打开或者关闭某个组件Booleanfalsetrue
options按钮组的配置参数,数组形式,见上方说明Array[ ]-

Event

事件名说明回调参数
click点击组件时触发(index1, index),见上方”点击事件”的说明
close组件触发关闭状态时index: 通过props传递的index
open组件触发打开状态时index: 通过props传递的index
content-click点击内容时触发index: 通过props传递的index