小程序侧滑删除组件使用movable-area

 组件页面代码:

<movable-area>
  <movable-view class='conversation' catchtap='toChat' direction='horizontal'
    x='{{x}}' damping="100" data-index='{{index}}' data-userid='{{userid}}'
    bind:touchstart='touchstart' bind:touchend='touchend' catch:change='onChange'>
    <slot></slot>
    <view class='delete' catchtap='delConversation' data-index='{{index}}'>删除</view>
  </movable-view>
</movable-area>

 组件JS代码: 

// pages/sliderLeft/sliderLeft.js
Component({
  /**
   * 组件的属性列表
   */
  properties: {
    userid: {
      type: Number,
      value: '1'
    },
    index: {
      type: Number,
      value: '0'
    },
    isOpen: {
      type: Boolean,
      value: false,
      observer: function (isOpen) {
        this.setData({
          x: isOpen ? -100 : 0
        })
      }
    }    
  },

  /**
   * 组件的初始数据
   */
  data: {
    x: 0,
  },

  /**
   * 组件的方法列表
   */
  methods: {
    onChange: function (e) {
      if (e.detail.source === 'touch') {
        this.setData({ x: e.detail.x })
      }
    },

    touchstart: function (e) {
      if(!this.data.isOpen){
        this.triggerEvent('conversationTouchstart', { index: e.currentTarget.dataset.index }, {})
      }
    },

    touchend: function (e) {
      var x = this.data.x;
      //删除按钮已显示,则一滑动就关闭
      if (this.data.isOpen && x > -96) {
        this.setData({ 
          x: 0,
          isOpen: false
        })
      }else if(x < -40) {
        //达到阈值则显示否则关闭
        this.setData({
          isOpen: true
        })
      } else {
        this.setData({
          x: 0,
          isOpen: false
        })
      }
    },

    /**
     * 删除会话
     */
    delConversation: function (e) {
      this.triggerEvent('delConversation', {index: e.currentTarget.dataset.index}, {})
    },

    /**
     * 跳转到聊天界面
     */
    toChat: function (e) {
      wx.navigateTo({
        url: '../chat/index?userId=' + e.currentTarget.dataset.userid,
      })
    },

  }
})

 组件CSS代码: 

movable-area{
  width: 1150rpx;
  height: 180rpx;
  display: flex;
  margin-left: -200rpx;
  justify-content: flex-end;
}

.conversation{
  width: 950rpx;
  height: 180rpx;
  position: static;
   display: flex;
}

.delete{
  width: 200rpx;
  height: 180rpx;
  background: red;
  color: white;
  font-size: 45rpx;
  line-height: 180rpx;
  text-align: center;
}

使用页面代码: 

<block wx:for='{{conversations}}' wx:for-item='item' wx:for-index='index' wx:key='{{item.userId}}'>
  <swider-left is-open='{{item.isOpen}}'  userid='{{item.userId}}' index='{{index}}' 
    binddelConversation='delConversation' bindconversationTouchstart='touchstart'>
    <view class='userInfo'>
        <image class='avatar' src='{{item.avatar}}'></image>
        <view class='info'>
          <view class='name'>{{item.name}}
            <view class='remind' wx:if='{{item.unread_msg_count > 0}}'></view>
          </view>
          <view>{{item.mtime}}</view>
        </view>
      </view>
    </swider-left>
</block>

使用页面JS代码:

 /**
   * 隐藏所有删除按钮
   */
  touchstart: function(e){
    var conversations = this.data.conversations;
    conversations[e.detail.index].isOpen = false;
    this.setData({
      conversations: conversations
    })
  },

  /**
   * 删除列表项
   */
  delConversation: function (e) {
    //选项索引
    var index = e.detail.index;
  },

 

微信小程序-wepy-侧滑删除组件,支持自定义内容区在最近的微信小程序开发过程中需要用到侧滑删除的功能,微信小程序官方是没有提供这样的组件,再加上我们的微信小程序使用的是wepy组件开发框架开发的,wepy也没有提供这样的组件,之前也在github上搜索这方面的组件,没有发现合适的,当时只发现了一个开源的:https://github.com/GeoffZhu/wepy-swipe-delete 只不过该组件功能单一已经被作者废弃了,无奈自己动手撸了一个侧滑删除组件,现在把它开源出来吧。Requirementswepy: "^1.7.3"支持功能和特点自定义内容区域:支持之定义内容区域,组件使用 slot占位。自定义滚动高度:可以自定义scroll-view的高度,默认为屏幕的高度。自定义menu :如果默认的menu样式不喜欢可以自定义,也可以显示或者隐藏指定的menu。左右滑动:支持左右滑动也可以设置只左右或者右滑。效果如下:       如何使用目前支持两种使用模式:1.page页面模式优点:可定制化高,扩展性强。 缺点:集成复杂,代码复用性差。2.component 组件模式优点:集成简单,代码复用性强,减少包的大小。 缺点:可定制到低。不建议使用page页面模式,下面详细介绍component 组件模式的使用如何使用// 导入组件import SwipeDeleteView from '@/components/wepy-swipe-delete-view'// 声明组件  components = {       swipeDelete: SwipeDeleteView     }       // 引用组件   <template>   <swipeDelete :list.sync="list">       <view class="item">{{item.userName}}</view>     </swipeDelete>   </template>配置如下:<swipeDelete   :list.sync="list"                :scrollHeight="scrollHeight"                @deleteTap.user="deleteTap"                @deleteLongTap.user="deleteLongTap"                @editTap.user="editTap"                @editLongTap.user="editLongTap"                @addTap.user="addTap"                @addLongTap.user="addLongTap"                @markTap.user="markTap"                @markLongTap.user="markLongTap">属性属性说明备注list要显示的列表的原始数据,最好是加上.sync这样可以异步传值必传scrollHeight设置scroll-view的高度,默认为屏幕高度选传deleteTap.user删除menu单击事件回调必要时传deleteLongTap.user删除menu长按事件回调必要时传editTap.user编辑menu单击事件回调必要时传editLongTap.user编辑menu长按事件回调必要时传addTap.user添加menu单击事件回调必要时传addLongTap.user添加menu长按事件回调必要时传markTap.user标记menu单击事件回调必要时传markLongTap.user标记menu长按事件回调必要时传每个点击事件或者长按事件都会返回两个参数methods = {       deleteTap(view, item) {         console.log(item)         view.deleteItem()       },       deleteLongTap(view, item) {         console.log(item)         wx.showModal({           title: '提示',           content: '确定要删除吗?',           success: function (res) {             if (res.confirm) {               view.deleteItem()             } else {               view.closeItem()             }           }         })       }    }view :view 是SwipeDeleteView对象的本身,可以通过view来做一些其他操作,如:删除当前的itemitem : item 就是当前操作的原始数据,可以通过item获取真正需要的数据当前SwipeDeleteView对外暴露的函数有:函数名称函数说明参数deleteItem删除当前操作的item(原始数据 view)都会被删除不需要参数closeItem关闭当前操作的item,原始数据不变不需要参数网络异步加载更新如果使用的网络异步加载完成以后,还需要更新下组件,不然会出现无法侧滑的情况。导致原因:原始数据更新以后组件内部无法监听到,这样就不能获取到左右menu的宽度,所以不能侧滑解决办法:this.$invoke('swipeDelete', 'update'); swipeDelete必须和 components = {swipeDelete: SwipeDeleteView} 同名。代码如下:// 模拟网络加载延迟2秒钟    let that = this      setTimeout(function () {        for (let i = 0; i < 20; i ) {          let msg = {}          msg.userName = ''   '用户'   (i   1)          msg.msgText = '您有新的消息'          msg.color = that.buildRandomColor()          msg.height = that.buildRandomHeight()          msg.headerImg = options.avatarUrl          that.list.push(msg)        }        wx.hideLoading()        // 更新组件        that.$invoke('swipeDelete', 'update')        that.$apply()      }, 2000)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值