微信小程序列表左滑删除,删除按钮自适应高度,删除后列表归位,同时存在一个左滑元素,目前为止写过最舒服的左滑删除

js

page({

  data:{

  items:[

    //isTouchMove初始化取消所有元素的向左滑动

{name:‘店名范德萨‘,huowu:‘鸭脖货物鸭肠鸭头鸭爪鸭翅‘,time:‘2032-32-32 12:21‘,zhuangtai:‘待付款‘,price:‘23‘,current:1,isTouchMove: false},

{name:‘店名久久丫‘,huowu:‘鸭脖货物鸭肠鸭头鸭爪鸭翅‘,time:‘2032-32-32 12:21‘,zhuangtai:‘待收货‘,price:‘23‘,current:2,isTouchMove: false},

{name:‘店名武汉鸭头‘,huowu:‘鸭脖货物鸭肠鸭头鸭爪鸭翅‘,time:‘2032-32-32 12:21‘,zhuangtai:‘待评价‘,price:‘23‘,current:3,isTouchMove: false},

{name:‘店名周黑鸭‘,huowu:‘鸭脖货物鸭肠鸭头鸭爪鸭翅‘,time:‘2032-32-32 12:21‘,zhuangtai:‘退款‘,price:‘23‘,current:4,isTouchMove: false},

]

  },

  

//手指触摸动作开始 记录起点X坐标

touchstart: function (e) {

//开始触摸时 重置所有删除

this.data.items.forEach(function (v, i) {

if (v.isTouchMove)//只操作为true的

v.isTouchMove = false;

})

this.setData({

startX: e.changedTouches[0].clientX,

startY: e.changedTouches[0].clientY,

items: this.data.items

})

},

//滑动事件处理

touchmove: function (e) {

var that = this,

index = e.currentTarget.dataset.index,//当前索引

startX = that.data.startX,//开始X坐标

startY = that.data.startY,//开始Y坐标

touchMoveX = e.changedTouches[0].clientX,//滑动变化坐标

touchMoveY = e.changedTouches[0].clientY,//滑动变化坐标

//获取滑动角度

angle = that.angle({ X: startX, Y: startY }, { X: touchMoveX, Y: touchMoveY });

that.data.items.forEach(function (v, i) {

v.isTouchMove = false

//滑动超过30度角 return

if (Math.abs(angle) > 30) return;

if (i == index) {

if (touchMoveX > startX) //右滑

v.isTouchMove = false

else //左滑

v.isTouchMove = true

}

})

//更新数据

that.setData({

items: that.data.items

})

},

angle: function (start, end) {

var _X = end.X - start.X,

_Y = end.Y - start.Y

//返回角度 /Math.atan()返回数字的反正切值

return 360 * Math.atan(_Y / _X) / (2 * Math.PI);

},

//删除事件

del: function (e) {

console.log(e)

this.data.items.splice(e.currentTarget.dataset.index, 1)

this.setData({

items: this.data.items

})

},

})

css

.touch-item {

font-size: 14px;

display: flex;

justify-content: space-between;

/* border-bottom:1px solid #ccc; */

width: 690rpx;

margin: 0 auto 15rpx;

overflow: hidden

}

.content {

width: 100%;

padding: 10px;

/* line-height: 22px; */

margin-right:0;

-webkit-transition: all 0.4s;

transition: all 0.4s;

-webkit-transform: translateX(90px);

transform: translateX(90px);

margin-left: -90px

}

.del {

background-color: #D42F1E;

width: 137rpx;

display: flex;

font-size: 32rpx;

flex-direction: column;

align-items: center;

justify-content: center;

color: #fff;

-webkit-transform: translateX(90px);

transform: translateX(90px);

-webkit-transition: all 0.4s;

transition: all 0.4s;

}

.touch-move-active .content,

.touch-move-active .del {

-webkit-transform: translateX(0);

transform: translateX(0);

}

.list{

background-color: #fff;

padding: 28rpx 10rpx 30rpx;

border-radius: 20rpx;

width: 100%;

margin-right:0;

-webkit-transition: all 0.4s;

transition: all 0.4s;

-webkit-transform: translateX(90px);

transform: translateX(90px);

margin-left: -90px

}

.title{

display: flex;

align-items: center;

justify-content: space-between;

padding-bottom: 20rpx;

border-bottom: 1rpx solid #F9F9F9;

}

.shop{

display: flex;

align-items: center;

}

.shopping{

color: #191919;

font-size: 30rpx;

font-weight: 600;

margin-right: 14rpx;

}

.desc{

color: #959595;

font-size: 26rpx;

overflow: hidden;

text-overflow:ellipsis;

white-space: nowrap;

width: 200rpx;

}

.zhuangtai{

color: #EA2C1A;

font-size: 30rpx;

}

.product{

margin-top: 30rpx;

display: flex;

}

.pLeft{

width: 100rpx;

height: 100rpx;

margin-right: 25rpx;

}

.pImg{

width: 100%;

height: 100%;

border-radius: 10rpx;

}

.pRight{

display: flex;

flex-direction: column;

padding-top: 9rpx;

}

.time{

color: #6C6C6C;

font-size: 28rpx;

}

.price{

color: #6C6C6C;

font-size: 28rpx;

margin-top: 16rpx;

}

.operation{

width: 100%;

text-align: right;

height: 60rpx;

display: flex;

justify-content: flex-end;

}

.anniu{

/* padding:0 22rpx; */

width: 150rpx;

height: 60rpx;

text-align: center;

line-height: 56rpx;

border: 1rpx solid #3A3A3A;

border-radius: 30rpx;

background-color: #fff;

color: #3A3A3A;

font-size: 28rpx;

}

wxml

<view class="touch-item {{item.isTouchMove ? ‘touch-move-active‘ : ‘‘}} mylist" data-index="{{index}}" bindtouchstart="touchstart" bindtouchmove="touchmove" wx:for="{{items}}" wx:key="index">

<view class="list content" catchtap="details">

<view class="title">

<view class="shop">

<view class="shopping">{{item.name}}</view>

<view class="desc">{{item.huowu}}</view>

</view>

<view class="zhuangtai">{{item.zhuangtai}}</view>

</view>

<view class="product">

<view class="pLeft">

<image  mode=‘aspectFill‘ src="/images/1.png" class="pImg"></image>

</view>

<view class="pRight">

<view class="time">下单时间:{{item.time}}</view>

<view class="price">总价:¥{{item.price}}</view>

</view>

</view>

<view class="operation">

<view class="anniu" wx:if="{{item.current == 1}}" >去支付</view>

<view class="anniu" wx:if="{{item.current == 2}}">确认收货</view>

<view class="anniu" wx:if="{{item.current == 3}}" bindtap="evaluate">评价</view>

<view class="anniu" wx:if="{{item.current == 4}}">退款进度</view>

</view>

</view>

<view class="del" catchtap="del" data-index="{{index}}">删除</view>

</view>

原文地址:https://www.cnblogs.com/lishuang2243/p/12660458.html

时间: 2024-10-29 05:35:22

微信小程序列表左滑删除,删除按钮自适应高度,删除后列表归位,同时存在一个左滑元素,目前为止写过最舒服的左滑删除的相关文章

微信小程序开发——连续快速点击按钮调用小程序api返回后仍然自动重新调用的异常处理

前言: 小程序开发中诸如获取用户手机号码.调起微信支付.领取卡券等api都是会有一定的延迟的.也就是说通过点击按钮调用这些api的时候,从点击按钮调用api,到支付页面或者领取卡券界面展示出来是需要一定时间的,连续点击按钮,还是有可能会重复调用的. 虽然这种情况有点极端,正常用户是不会这么连续快速的点击按钮的,但是也不能排除有用户手抖,连续点了两下.如果重复调用的话,不仅体验不好,单击事件中涉及到后端接口操作的也可能引起其他异常.所以这个问题还是要处理下的. 刚开始想到的是使用loading开启

微信小程序源码下载(200多个)

微信小程序源码下载汇总,点击标题进入对应的微信小程序下载页面. 最新 demo源码(点击标题进入帖子下载) 描述 1 微信小程序 会议室预定小程序 微信小程序 会议室预定小程序**** 本内容被作者隐藏 **** 2 微信小程序-双人五子棋小游戏 微信小程序-双人五子棋小游戏**** 本内容被作者隐藏 **** 3 打卡签到小程序 用微信小程序实现的一个简单的打卡签到的小程序拒绝 4 微信小程序---左滑删除 微信小程序---左滑删除**** 本内容被作者隐藏 **** 5 一个借钱的记事本的微

微信应用号(微信小程序小程序)开发教程

小提示: http://wxopen.notedown.cn/ 这里面复刻了微信小程序的 api 第三章:微信小程序项目结构以及配置 找到创建的 demo 文件夹,把项目导入到你的编辑器,这里使用的是 Sublime Text 编辑器. 这个时候需要根据自己的项目需求结构进行更改了,项目根目录下面是首页渲染的几个 tabBar 页面,以及 app 的一些配置文件,如名片盒项目的 tabBar 是 3 个切换菜单: 我们先找到 app.json 文件打开配置好这几个菜单,配置好 tabBar,这个

微信小程序实例源码大全

怎么本地测试微信小程序实例源码 1.下载源码 2.打开微信开发者工具 3.添加项目->选择本项目目录->编译执行 微信小程序实例源码大全 微信小程序游戏类demo:识色:从相似颜色中挑选不同的一个 源码链接:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=1105 微信小程序精品demo:仿网易云音乐:歌单,FM,播放,评论 源码链接:http://www.wxapp-union.com/forum.php?mod=vie

微信小程序实例源码大全demo下载

怎么本地测试微信小程序实例源码 1.下载源码 2.打开微信开发者工具 3.添加项目->选择本项目目录->编译执行 微信小程序实例源码大全 微信小程序游戏类demo:识色:从相似颜色中挑选不同的一个 源码链接:http://www.wxapp-union.com/forum.php?mod=viewthread&tid=1105 微信小程序精品demo:仿网易云音乐:歌单,FM,播放,评论 源码链接:http://www.wxapp-union.com/forum.php?mod=vie

微信小程序--图片相关问题合辑

图片上传相关文章 微信小程序多张图片上传功能 微信小程序开发(二)图片上传 微信小程序上传一或多张图片 微信小程序实现选择图片九宫格带预览 ETL:微信小程序之图片上传 微信小程序wx.previewImage预览图片 微信小程序之预览图片 小程序开发:上传图片到腾讯云 .NET开发微信小程序-上传图片到服务器 微信小程序本地图片处理--按屏幕尺寸插入图片 [微信小程序]上传图片到阿里云OSS Python Flask小程序文件(图片)上传技巧 小程序图片上传阿里OSS使用方法 微信小程序问题汇

1.什么是微信小程序

微信小程序,简称CX,是一种不需要下载安装即可使用的应用,它实现了应用"触手可及"的梦想,用户扫一扫或者搜一下即可打开应用.也体现了"用完即走"的理念,用户不用关心是否安装太多应用的问题. 应用将无处不在,随时可用,但又无需安装卸载. 微信小程序于2017年1月9日凌晨正式上线.张小龙随后在朋友圈发出一条写着"2017.1.9"的状态,同时配有 iPhone 一代的新品发布图.张小龙以这样的形式,向乔布斯致敬. 微信将"小程序"

微信小程序裁剪图片成圆形

代码地址如下:http://www.demodashi.com/demo/14453.html 前言 最近在开发小程序,产品经理提了一个需求,要求微信小程序换头像,用户剪裁图片必须是圆形,也在github上看了一些例子,一般剪裁图片用的都是方形,所以自己打算写一个小组件,可以把图片剪裁成圆形,主要思路就是使用canvas绘图,把剪裁的图片绘制成圆形,另外剪裁图片的窗口还可以移动放大缩小,这个功能就用了微信组件movable-view,好了,该说的也说完了,下面咱们开始撸代码. movable-v

微信小程序开发之不能使用eval函数的问题

一 eval函数问题 JavaScript中的eval函数是颇受开发者争议的问题之一,问题主要在于其可能导致的不安全性.有关此方面问题,在此不再赘述,读者可能很容易地浏览到许多介绍性文章. 但是,eval函数的优点也是很明显的.例如,使用JS编写一个计算器程序,在遇到"2+1-3*5"这样的字符串时,使用eval就可以很容易地计算出,类似如: var s="2+1-3*5"; console.log(eval(s)); 二 微信小程序练手遇到问题 (1)微信小程序环