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


Posted in Javascript onOctober 19, 2020

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

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();
 })
 }

})

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

Javascript 相关文章推荐
Open and Print a Word Document
Jun 15 Javascript
js中return false(阻止)的用法
Aug 14 Javascript
jquery 日期控件datepicker属性详细解析
Nov 08 Javascript
js控制table合并具体实现
Feb 20 Javascript
什么是Node.js?Node.js详细介绍
Jun 01 Javascript
javascript ajax的5种状态介绍
Aug 18 Javascript
通过jquery 获取URL参数并进行转码
Aug 18 Javascript
js 动态修改css文件用到了cssRule
Aug 20 Javascript
jQuery子窗体取得父窗体元素的方法
May 11 Javascript
浅谈bootstrap源码分析之scrollspy(滚动侦听)
Jun 06 Javascript
基于jQuery的ajax方法封装
Jul 14 Javascript
jQuery动画_动力节点节点Java学院整理
Jul 04 jQuery
小程序实现列表删除功能
Oct 30 #Javascript
require.js 加载过程与使用方法介绍
Oct 30 #Javascript
小程序实现左滑删除功能
Oct 30 #Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
Oct 30 #Javascript
小程序云开发部署攻略(图文教程)
Oct 30 #Javascript
傻瓜式解读koa中间件处理模块koa-compose的使用
Oct 30 #Javascript
微信小程序实现单选功能
Oct 30 #Javascript
You might like
二十行语句实现从Excel到mysql的转化
2006/10/09 PHP
解析PHP中的内存管理,PHP动态分配和释放内存
2013/06/28 PHP
php将图片保存为不同尺寸图片的图片类实例
2015/03/30 PHP
PHP+Ajax异步带进度条上传文件实例
2016/11/01 PHP
input+select(multiple) 实现下拉框输入值
2009/05/21 Javascript
通过javascript获取iframe里的值示例代码
2013/06/24 Javascript
输入自动提示搜索提示功能的javascript:sugggestion.js
2013/09/02 Javascript
Web开发必知Javascript技巧大全
2016/02/23 Javascript
使用jquery提交form表单并自定义action的方法
2016/05/25 Javascript
jQuery图片左右滚动代码 有左右按钮实例
2016/06/20 Javascript
jQuery的Read()方法代替原生JS详解
2016/11/08 Javascript
js 获取本地文件及目录的方法(推荐)
2016/11/10 Javascript
JavaScript拖动层Div代码
2017/03/01 Javascript
详解Vue方法与事件
2017/03/09 Javascript
JS/jQuery实现DIV延时几秒后消失或显示的方法
2018/02/12 jQuery
详解angular路由高亮之RouterLinkActive
2018/04/28 Javascript
koa2的中间件功能及应用示例
2020/03/05 Javascript
如何使用vue slot创建一个模态框的实例代码
2020/05/24 Javascript
[03:42]2016国际邀请赛中国区预选赛首日现场玩家采访
2016/06/26 DOTA
python3序列化与反序列化用法实例
2015/05/26 Python
python通过cookie模拟已登录状态的初步研究
2016/11/09 Python
Python使用time模块实现指定时间触发器示例
2017/05/18 Python
Python基于正则表达式实现文件内容替换的方法
2017/08/30 Python
Python操作MySQL数据库的三种方法总结
2018/01/30 Python
python使用for循环计算0-100的整数的和方法
2019/02/01 Python
详解Python循环作用域与闭包
2019/03/21 Python
matplotlib教程——强大的python作图工具库
2020/10/15 Python
python 自动识别并连接串口的实现
2021/01/19 Python
HTML5实现简单图片上传所遇到的问题及解决办法
2016/01/20 HTML / CSS
TCP/IP的分层模型
2013/10/27 面试题
环保标语大全
2014/06/12 职场文书
民事诉讼代理授权委托书
2014/10/11 职场文书
党的群众路线教育实践活动整改落实情况报告
2014/10/28 职场文书
团组织推荐意见
2015/06/05 职场文书
Redis高级数据类型Hyperloglog、Bitmap的使用
2021/05/24 Redis
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis