欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

微信小程序实现左滑修改、删除功能

程序员文章站 2023-11-28 08:54:46
本文实例为大家分享了微信小程序实现左滑修改、删除的具体代码,供大家参考,具体内容如下 wxml:

本文实例为大家分享了微信小程序实现左滑修改、删除的具体代码,供大家参考,具体内容如下

wxml:

<view class="offer-item" wx:for-items='{{offerlist}}'>
  <!--这里绑定了刚才说的3个函数分别为 touchs,touchm touche-->
  <!--这里注意这个 style="{{item.txtstyle}}" ,这是我们一会再js中 将要设置的样式 -->
  <view style="{{item.txtstyle}}">
   <view class="offer-item-top fl clearfix" bindtouchstart="touchs" bindtouchmove="touchm" bindtouchend="touche" data-index="{{index}}">
    <navigator bindtap='navigatorto' data-index="{{item.id}}">
     <view class='content'>
      <view class='title clearfix'>
       <view class='fl'>
        {{item.title}}党建项目报价表
       </view>
       <image src='../../images/right.png' class='fr'></image>
      </view>
      <view class='note clearfix'>
       <view class='price fl'>
        {{item.create_time}}
       </view>
      </view>
     </view>
    </navigator>
   </view>

   <!--这里是左滑按钮部分----start-->
   <view bindtap="delitem" class='posit fr ismove' hidden='{{!item.ismove}}'>
     <view class="ref" data-offerid="{{item.id}}" data-index="{{item.id}}" catchtap="ref">
      <image src='../../images/ref.png'></image>
     </view>
     <view class="del" data-offerid="{{item.id}}" data-index="{{item.id}}" catchtap="del">
      <image src='../../images/default.png'></image>
     </view>
   </view>
   <!--这里是左滑按钮部分----end-->
  </view>
</view>

wxss:

.offer-item {
 height: 150rpx;
 width: 100vw;
 overflow-x: hidden;
 border-bottom: 1px solid #f0f0f0;
}

.offer-item>view {
 position: absolute;
 /* width: calc(100% + 200rpx); */
 height: 150rpx; 
}

.offer-item .offer-item-top {
 height: 100%;
}

.offer-item .offer-item-top navigator {
 display: inline-block;
 width: 100vw; 
 height: 100%;
}

.offer-item .content {
 padding: 35rpx 30rpx;
 position: relative;
 height: calc(100% - 70rpx);
}

.offer-item .title .fl {
 display: inline-block;
 width: 78%;
 overflow: hidden;
 text-overflow: ellipsis;
 white-space: nowrap;
 font-size: 30rpx;
 color: #333;
}

.offer-item .title .fr {
 display: inline-block;
 width: 20rpx;
 height: 26rpx;
 margin-top: 5rpx;
}

.offer-item .note {
 position: absolute;
 left: 30rpx;
 bottom: 35rpx;
 width: calc(100vw - 60rpx);
 font-size: 24rpx;
 color: #999;
}

.offer-item .posit {
 width: 200rpx;
 height: 150rpx;
 line-height: 150rpx;
 text-align: center;
 display: none
}

.posit.ismove {
 display: inline-block;
 position: absolute;
}

.posit.ismove[hidden] {
 display: none
}

.offer-item .posit>view {
 display: inline-block;
 width: 100rpx;
}

.offer-item .posit>view:first-of-type {
 background-color: #fed847;
}

.offer-item .posit>view:last-of-type {
 background-color: #c71b1b;
}

.offer-item .posit image {
 display: inline-block;
 width: 36rpx;
 height: 36rpx;
}

js:

let len = 0;     // 初次加载长度
let hadlastpage = false; // 判断是否到最后一页

var initdata = function (that) {
 var list = that.data.offerlist
 for (var i = 0; i < list.length; i++) {
  list[i].txtstyle = "";
  list[i].ismove = false;
 }
 that.setdata({ 
  offerlist: list
 })
}

page({
 data: {
  offerlist: [

  ],
  delbtnwidth: 100,   // 删除按钮宽度单位(rpx)
 },


 // 手指刚放到屏幕触发
 touchs: function (e) {
  console.log("touchs" + e);
  // initdata(this);
  // 判断是否只有一个触摸点
  if (e.touches.length == 1) {
   this.setdata({
    // 记录触摸起始位置的x坐标
    startx: e.touches[0].clientx
   });
  };
  return false;
 },

 // 触摸时触发,手指在屏幕上每移动一次,触发一次
 touchm: function (e) {
  var that = this;
  initdata(that);
  if (e.touches.length == 1) {
   // 记录触摸点位置的x坐标
   var movex = e.touches[0].clientx;
   // 计算手指起始点的x坐标与当前触摸点的x坐标的差值
   var disx = that.data.startx - movex;
   // delbtnwidth 为右侧按钮区域的宽度
   var delbtnwidth = that.data.delbtnwidth;
   var txtstyle = "";
   if (disx == 0 || disx < 0) {   // 如果移动距离小于等于0,文本层位置不变
    txtstyle = "left:0px";
   } else if (disx > 0) {      // 移动距离大于0,文本层left值等于手指移动距离
    txtstyle = "left:-" + disx + "px";
    if (disx >= delbtnwidth) {
     // 控制手指移动距离最大值为删除按钮的宽度
     txtstyle = "left:-" + delbtnwidth + "px";
    }
   }
   // 获取手指触摸的是哪一个item
   var index = e.currenttarget.dataset.index;
   var list = that.data.offerlist;
   // 将拼接好的样式设置到当前item中
   list[index].txtstyle = txtstyle;

   list[index].ismove = true;
   // 更新列表的状态
   this.setdata({
    offerlist: list
   });
  }
 },
 touche: function (e) {
  console.log( e);
  var that = this
  if (e.changedtouches.length == 1) {
   // 手指移动结束后触摸点位置的x坐标
   var endx = e.changedtouches[0].clientx;
   // 触摸开始与结束,手指移动的距离
   var disx = that.data.startx - endx;
   var delbtnwidth = that.data.delbtnwidth;
   // 如果距离小于删除按钮的1/2,不显示删除按钮
   var txtstyle = disx > delbtnwidth / 2 ? "left:-" + delbtnwidth + "px" : "left:0px";
   // 获取手指触摸的是哪一项
   var index = e.currenttarget.dataset.index;
   var list = that.data.offerlist;
   list[index].txtstyle = txtstyle;
   // 更新列表的状态
   that.setdata({
    offerlist: list
   });
  }
 },

 /**
  * 
  */
 navigatorto: function (event) {

 },

 /**
  * 删除操作
  */
 del: function (e) {
  var that = this;
  var data = {
   id: e.currenttarget.dataset.index
  };
  wx.showmodal({
   title: '',
   content: '确定选择删除么?',
   confirmcolor: '#c71b1b',
   cancelcolor: '#666666',
   success: function (res) {
    if (res.confirm) {
     utils.requestfun("接口url", data, 'post', function (msg) {
      console.log(msg)

      wx.showtoast({
       title: '删除成功',
       icon: 'success',
       duration: 1500
      })
      var lists = that.data.offerlist;
      var list1 = [];
      for (let i = 0; i < lists.length; i++) {
       if (lists[i].id != e.currenttarget.dataset.index) {
        list1.push(lists[i])
       }
      }
      len--;
      that.setdata({
       offerlist: list1
      })
     })
    } else if (res.cancel) {

    }
   }
  })
 },

 /**
  * 修改操作
  */
 ref: function (e) {
  wx.navigateto({
   url: '修改页面路径?id=' + e.currenttarget.dataset.index,
  })
 },

 /**
  * 生命周期函数--监听页面加载
  */
 onload: function (options) {
  page = 0;
  this.loadlist();
 },


 /**
  * 生命周期函数--监听页面初次渲染完成
  */
 onready: function () {

 },

 /**
  * 生命周期函数--监听页面显示
  */
 onshow: function () {

 },

 /**
  * 生命周期函数--监听页面隐藏
  */
 onhide: function () {

 },

 /**
  * 生命周期函数--监听页面卸载
  */
 onunload: function () {
   hadlastpage = false;
   len = 0; 
 },

 /**
  * 页面相关事件处理函数--监听用户下拉动作
  */
 onpulldownrefresh: function () {

 },

 /**
  * 页面上拉触底事件的处理函数
  */
 onreachbottom: function (event) {
  console.log("上拉事件")
  this.loadlist();
 }, 

 /** 
  * 数据请求封装
  */
 loadlist: function (event) {
  if (hadlastpage != false) {
   wx.showtoast({
    title: '到底啦',
   });
   return;
  }
  var that = this;
  // 显示加载图标 
  wx.showloading({
   title: '玩命加载中',
  })

  let data = {
    length: len,
    openid: 'openid'
  };
  utils.requestfun("接口url", data, 'post', function (msg) {

   if (msg.data.length != 0) {
    var lists = that.data.offerlist;
    for (let i = 0; i < msg.data.length; i++) {
     msg.data[i].ismove = false;
     lists.push(msg.data[i]);
    }

    // len 
    len = len + msg.data.length;

    // 设置数据 
    that.setdata({
     offerlist: lists
    })
   } else {
    hadlastpage = true;
   }
   wx.hideloading();
  })
 }

})

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。