天天看點

微信實作左滑删除

wxml

<view class="delete_list">
    <view wx:for="{{contactList}}" wx:key="{{index}}}" bindtouchstart="touchstart" bindtouchmove="touchmove" class='list-box' bindtouchend="touchend" data-index="{{index}}"  data-info='{{item}}'>
      <view class="list">
        <view class="content" style="{{activeIndex===index?list_style:''}}">{{item.name}}</view>
        <view class="delete" data-info="{{item}}" bindtap="deleteContact" style="{{activeIndex===index?list_style:''}}">删除</view>
      </view>
      <view style='' class='list-border {{index==contactList.length-1?"no-border":""}}'></view>
    </view>
  </view>
           

wxss

/* 滑動删除的樣式 */
.delete_list {
  background-color: #fff;
  padding-left: 32rpx;
  box-sizing: border-box;
}
.delete_list .list {
  height: 120rpx;
  line-height: 120rpx;
  display: flex;
  width: 100%;
  overflow: hidden;
   /* box-shadow: 0 0px 0px 0px #fff; 模拟一像素邊框 */
}
.list-border{
margin-right:32rpx;
border-bottom:2rpx solid #EFF1F4;
}
.no-border{
  border-bottom: 0!important;
}
.delete_list .list>.content {
  flex: 1;
  transform: translateX(240rpx); /* 這個是delete的寬度的設定 */
  margin-left: -240rpx;/* 這個是delete的寬度的設定 */
  transition: all 0.2s ease-in-out;
}
.delete_list .list>.delete {
  width: 240rpx;
  text-align: center;  
  color: #fff;
  background-color: #E64340;
  transform: translateX(240rpx);/* 這個是delete預設将其隐藏*/
  transition: all 0.2s ease-in-out;
}
           

js

data: {
    contactList: [
      { id: 19, memberId: 105256, name: "hh", phone: "15236253253", selected: null },
      { id: 20, memberId: 105256, name: "ff", phone: "18836293253", selected: null },
    ], //資料接收
    activeIndex: -1, //這個限制滑動元素隻能打開一個,打開第二的時候第一個關閉
    list_style: '', //元素左滑的樣式
    startX: 0,
    rate: 2  //轉化rpx的接收屬性
  },
    onLoad: function(options) {
    // 擷取裝置寬度進而進行像素轉換
    let rate = 750 / wx.getSystemInfoSync().screenWidth 
    this.setData({
      rate: rate
    })
  },
  // 觸摸開始
  touchstart: function(e) {
    let startX = e.touches[0].clientX
    console.log(startX)
    this.setData({
      startX: startX
    })
  },
  // 移動
  touchmove: function(e) {
    console.log(e.touches[0].clientX)
    let moveX = e.touches[0].clientX
    let dis = (this.data.startX - moveX) * this.data.rate // 換算成rpx
    let activeIndex = e.currentTarget.dataset.index
    let left = 240
    if (dis <= 0) {
      left = 240
    } else if (dis >= 240) {
      left = 0
    } else {
      left = 240 - dis
    }
    this.setData({
      list_style: 'transform:translateX(' + left + 'rpx)',
      activeIndex: activeIndex
    })
  },
  // 觸摸結束
  touchend: function(e) {
    let endX = e.changedTouches[0].clientX
    let dis = (this.data.startX - endX) * this.data.rate
    let activeIndex = e.currentTarget.dataset.index
    let left = 0
    if (dis >= 200) {
      left = 0
    } else {
      left = 240
    }
    this.setData({
      activeIndex: activeIndex,
      list_style: 'transform:translateX(' + left + 'rpx)'
    })
  },
// 删除
  deleteContact: function(e) {
    console.log(e)
    let val = e.currentTarget.dataset.info
    let _this = this
    util.request(['personalCenter', 'deleteMemberEmergencyContact'], [parseInt(val.id)], res => {
      console.log(res)
      wx.showToast({
        title: '删除成功',
      })
      _this.data.contactList.splice(_this.data.activeIndex, 1)
      _this.setData({
        contactList: _this.data.contactList
      })
    })
  },