微信小程序实现收货地址左滑删除


Posted in Javascript onNovember 18, 2020

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

效果:

微信小程序实现收货地址左滑删除

思路:

一、用相对定位和绝对定位,列表放在上层,删除按钮放在下层(z-index不要为负)。

二、触摸事件判断用户是否左滑,有 bindtouchstart,bindtouchmove,bindtouchend 三个触摸事件。

1、bindtouchstart 记录触摸开始的点。开始点的坐标在 e.touches[0] 中,这是相对于屏幕的,也就是以屏幕左上方为原点。

2、bindtouchmove 记录触摸移动时的点。同上。

3、bindtouchmove 记录触摸结束的点。结束点的坐标在 e.changedTouches[0] 中。

通过1、2方法,获取到触摸开始点、移动距离,就可以让列表层随触摸点左右移动;

通过3方法,获取最终点,判断与开始点的距离,如果这个距离小于删除按钮的一半,则还原列表层

代码:

1、wxml

<view wx:for="{{address}}" style='position: relative;'>
 <!-- 列表层 -->
 <view class='list' style='{{item.txtStyle}}' bindtouchstart="touchS" bindtouchmove="touchM" bindtouchend="touchE" data-index='{{index}}'>
 <!-- 收货信息 -->
 <view class='info' bindtap='select_addr' data-id="{{item.id}}">
 <view>
 {{item.name}} 
 <span class="phone">{{item.phone}}</span>
 <span wx:if="{{item.default == 1}}" class='def'>默认</span>
 </view>
 <view>
 {{item.province}} {{item.address}}
 </view>
 </view>
 <!-- 编辑图标 -->
 <view class='edit' bindtap='edit' data-id='{{item.id}}' >
 <image src='/image/edit.png'></image>
 </view>
 </view>
 <!-- 删除按钮 -->
 <view class="delete" data-id="{{item.id}}" data-index='{{index}}' bindtap="delItem" >删除</view>
</view>
 
<view class='add' bindtap='add'>添加地址</view>

2、wxss

page{
 background-color: #F0EFF5;
}
.list{
 position: relative;
 z-index: 2;
 overflow: hidden;
 background-color: white;
 margin-top: 2rpx;
 padding: 25rpx;
 display: flex;
 align-items: center;
 justify-content:space-between;
 min-height: 150rpx;
}
.delete{
 position: absolute;
 top:0rpx;
 background-color: #e64340;
 width: 180rpx;
 text-align: center;
 z-index: 1;
 right: 0;
 color: #fff;
 height: 100%;
 display: flex;
 align-items: center;
 justify-content: center;
}
.info{
 display: flex;
 flex-direction: column;
 align-items: flex-start;
}
.info view:first-child{
 text-align: center;
 font-size: 35rpx;
 margin-bottom: 10rpx;
}
.info view:nth-child(2){
 font-size: 30rpx;
 margin-bottom: 10rpx;
}
.def{
 font-size: 30rpx;
 border:1rpx solid red;
 border-radius: 5rpx;
 padding:0 10rpx;
 color: red;
 margin-right: 10rpx;
}
.phone{
 color:gray;font-size:30rpx;margin: 0 20rpx;
}
.edit{
 padding:40rpx;
}
.edit image{
 width: 40rpx;
 height: 40rpx;
 margin-left:10rpx;
}
.add{
 width: 650rpx;
 border: 2rpx solid gray;
 height: 100rpx;
 line-height: 100rpx;
 text-align: center;
 font-size: 30rpx;
 border-radius: 10rpx;
 position: fixed;
 bottom: 50rpx;
 left: 50rpx;
 background-color: white;
}

3、JS

Page({
 data: {
 address:[
 {
 id: "1",
 address: "1单元222号",
 name: "啦啦啦",
 default:"1",
 phone: "12222223333",
 province: "河北省 石家庄市 长安区",
 txtStyle: "",
 },
 {
 id: "2",
 address: "2幢2楼222号",
 name: "嚯嚯嚯",
 default: "0",
 phone: "12345678900",
 province: "浙江省 杭州市 市辖区",
 txtStyle: "",
 },
 {
 id: "3",
 address: "1幢1单元",
 name: "哈哈哈",
 default: "0",
 phone: "18208350499",
 province: "河北省 石家庄市 新华区",
 txtStyle: "",
 }
 ],
 delBtnWidth: 180
 },
 
 onLoad: function (options) {
 //获取收货地址 省略
 },
 
 edit: function (e) {
 //编辑收货地址 省略
 },
 
 add: function () {
 //增加收货地址 省略
 },
 
 delItem: function (e) {
 var id = e.currentTarget.dataset.id;
 var index = e.currentTarget.dataset.index;
 this.data.address.splice(index, 1);
 this.setData({
 address: this.data.address
 })
 },
 
 touchS: function (e) {
 if (e.touches.length == 1) {
 this.setData({
 //设置触摸起始点水平方向位置
 startX: e.touches[0].clientX
 });
 }
 },
 
 touchM: function (e) {
 if (e.touches.length == 1) {
 //手指移动时水平方向位置
 var moveX = e.touches[0].clientX;
 //手指起始点位置与移动期间的差值
 var disX = this.data.startX - moveX;
 var delBtnWidth = this.data.delBtnWidth;
 var txtStyle = "";
 if (disX == 0 || disX < 0) {//如果移动距离小于等于0,文本层位置不变
 txtStyle = "left:0rpx";
 } else if (disX > 0) {//移动距离大于0,文本层left值等于手指移动距离
 txtStyle = "left:-" + disX + "rpx";
 if (disX >= delBtnWidth) {
 //控制手指移动距离最大值为删除按钮的宽度
 txtStyle = "left:-" + delBtnWidth + "rpx";
 }
 }
 //获取手指触摸的是哪一项
 var index = e.currentTarget.dataset.index;
 var list = this.data.address;
 list[index]['txtStyle'] = txtStyle;
 //更新列表的状态
 this.setData({
 address: list
 });
 }
 },
 touchE: function (e) {
 if (e.changedTouches.length == 1) {
 //手指移动结束后水平位置
 var endX = e.changedTouches[0].clientX;
 //触摸开始与结束,手指移动的距离
 var disX = this.data.startX - endX;
 var delBtnWidth = this.data.delBtnWidth;
 //如果距离小于删除按钮的1/2,不显示删除按钮
 var txtStyle = disX > delBtnWidth / 2 ? "left:-" + delBtnWidth + "rpx" : "left:0rpx";
 //获取手指触摸的是哪一项
 var index = e.currentTarget.dataset.index;
 var list = this.data.address;
 var del_index = '';
 disX > delBtnWidth / 2 ? del_index = index : del_index = '';
 list[index].txtStyle = txtStyle;
 //更新列表的状态
 this.setData({
 address: list,
 del_index: del_index
 });
 }
 },
})

为大家推荐现在关注度比较高的微信小程序教程一篇:《微信小程序开发教程》小编为大家精心整理的,希望喜欢。

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

Javascript 相关文章推荐
JavaScript cookie的设置获取删除详解
Feb 11 Javascript
使用JavaScript判断图片是否加载完成的三种实现方式
May 04 Javascript
在AngularJS应用中实现一些动画效果的代码
Jun 18 Javascript
基于javascript实现随机颜色变化效果
Jan 14 Javascript
JS实现数字格式千分位相互转换方法
Aug 01 Javascript
jQuery 遍历map()方法详解
Nov 04 Javascript
jQuery按需加载轮播图(web前端性能优化)
Feb 17 Javascript
轻松学习Javascript闭包
Mar 01 Javascript
vue.js默认路由不加载linkActiveClass问题的解决方法
Dec 11 Javascript
使用classList来实现两个按钮样式的切换方法
Jan 24 Javascript
vue中Npm run build 根据环境传递参数方法来打包不同域名
Mar 29 Javascript
vue内置组件transition简单原理图文详解(小结)
Jul 12 Javascript
jquery-ui 进度条功能示例【测试可用】
Jul 25 #jQuery
微信小程序实现左滑动删除效果
Mar 30 #Javascript
jquery ui 实现 tab标签功能示例【测试可用】
Jul 25 #jQuery
小程序实现左滑删除效果
Jul 25 #Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
Jul 25 #Javascript
详解Vue.js和layui日期控件冲突问题解决办法
Jul 25 #Javascript
turn.js异步加载实现翻书效果
Jul 25 #Javascript
You might like
phpmyadmin操作流程
2006/10/09 PHP
twig里使用js变量的方法
2016/02/05 PHP
PHP十六进制颜色随机生成器功能示例
2017/07/24 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
经典的解除许多网站无法复制文字的绝招
2006/12/31 Javascript
jQuery中将函数赋值给变量的调用方法
2012/03/23 Javascript
js 高效去除数组重复元素示例代码
2013/12/19 Javascript
javascript跨浏览器的属性判断方法
2014/03/16 Javascript
jQuery实现页面内锚点平滑跳转特效的方法总结
2015/05/11 Javascript
jQuery、zepto、js常用小技巧
2017/02/12 Javascript
vue引入jq插件的实例讲解
2017/09/12 Javascript
浅谈vue的iview列表table render函数设置DOM属性值的方法
2017/09/30 Javascript
微信小程序自动客服功能
2017/11/02 Javascript
Node.js中DNS模块学习总结
2018/02/28 Javascript
Vue使用mixins实现压缩图片代码
2018/03/14 Javascript
如何检查一个对象是否为空
2019/04/11 Javascript
解决vue项目运行npm run serve报错的问题
2020/10/26 Javascript
[00:43]魔廷新尊——痛苦女王至宝捆绑包
2020/06/12 DOTA
Python中使用第三方库xlrd来写入Excel文件示例
2015/04/05 Python
Python数据结构之翻转链表
2017/02/25 Python
Flask框架实现给视图函数增加装饰器操作示例
2018/07/16 Python
python利用thrift服务读取hbase数据的方法
2018/12/27 Python
Python3.5多进程原理与用法实例分析
2019/04/05 Python
Python 函数list&amp;read&amp;seek详解
2019/08/28 Python
Python使用grequests(gevent+requests)并发发送请求过程解析
2019/09/25 Python
Python语言异常处理测试过程解析
2020/01/08 Python
求高于平均分的学生学号及成绩
2016/09/01 面试题
实习教师个人的自我评价
2013/11/08 职场文书
部队领导证婚词
2014/01/12 职场文书
三好学生个人先进事迹材料
2014/05/17 职场文书
教师外出学习心得体会
2016/01/18 职场文书
2019各种承诺书范文
2019/06/24 职场文书
node.js使用express-fileupload中间件实现文件上传
2021/07/16 Javascript
Redisson实现Redis分布式锁的几种方式
2021/08/07 Redis
Windows 11要来了?微软文档揭示Win11太阳谷 / Win10有两个不同版本
2021/11/21 数码科技
mysql幻读详解实例以及解决办法
2022/06/16 MySQL