微信小程序实现左滑动删除效果


Posted in Javascript onMarch 30, 2020

最近做微信小程序项目遇到左滑动效果,比如在我的收藏页面,我的历史浏览记录页面,我的购物车页面,大多数都会用到这种效果,我把代码复制出来,供大家参考,用的时候直接用模板,再此基础上修改就行。

wxml中的代码:

<view class="touch-item {{item.isTouchMove ? 'touch-move-active' : ''}}" data-index=" {{index}}" bindtouchstart="touchstart" bindtouchmove="touchmove" wx:for="{{items}}" wx:key="">
 <view class="content">
 <view class='com'>
 <view class='tp'>
  <image src="{{item.image_src}}" class='img' />
 </view>
 <view class='txt'>
  <view class='tit'>{{item.goods_name}}</view>

  <view class='bot'>

  <block wx:if="{{item.marketable=='true'}}">
  <view class="pri">
  <text class="new-price">¥{{item.goods_price}}</text>
  <text class="old-price">¥{{item.mktprice}}</text>
  </view>
  <navigator class='a'>
  <label class='ti1'>可使用优惠券</label>
  </navigator>
  </block>
  <block wx:else>
  <navigator class='a'>
  <label class='ti'>对不起该商品已下架</label>
  </navigator>
  </block>

  </view>
 </view>
 </view>
 </view>
<view class="del" catchtap="del" data-index="{{index}}" data-productid="{{item.product_id}}" data-goodsid="{{item.goods_id}}">删除</view>
</view>

我这是对完接口之后的代码,循环items,然后用{{item.}}取到下面的值,并且用了一个判断,如果后台返回来的字段值marketable==‘true',让其显示商品的销售价和原价,否则显示该商品已下架。

js中的代码:

data: {
 startX: 0, //开始坐标
 startY: 0
 },
 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
 })
 },

 /**
 * 计算滑动角度
 * @param {Object} start 起点坐标
 * @param {Object} end 终点坐标
 */
 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);
 },

wxml中的代码:

.touch-item {
 background-color: #fff;
 margin-top: 20rpx;
 display: flex;
 justify-content: space-between;
 width: 100%;
 overflow: hidden;
 box-sizing: border-box;
}

.content {
 width: 100%;
 -webkit-transition: all 0.4s;
 transition: all 0.4s;
 -webkit-transform: translateX(180rpx);
 transform: translateX(180rpx);
 margin-left: -180rpx;
}

.touch-move-active .content, .touch-move-active .del {
 -webkit-transform: translateX(0);
 transform: translateX(0);
}

.com {
 padding: 25rpx;
 height: 210rpx;
}

.tp {
 background-color: white;
 float: left;
}

.img {
 width: 210rpx;
 height: 210rpx;
 display: inline-block;
 vertical-align: middle;
 border-radius: 15rpx;
}

.txt {
 width: 420rpx;
 margin-left: 270rpx;
 position: relative;
}

.txt .tit {
 font-size: 28rpx;
 display: -webkit-box;
 -webkit-box-orient: vertical;
 -webkit-line-clamp: 2;
 overflow: hidden;
}

.txt .bot {
 width: 100%;
 font-size: 24rpx;
 margin-top: 20rpx;
}

.ti1 {
 margin-top: 15rpx;
 font-size: 23rpx;
 background-color: #fce64c;
 padding: 10rpx;
 display: inline-block;
}

.ti {
 margin-top: 35rpx;
 font-size: 28rpx;
 display: inline-block;
 color: #a2a2a2;
}

.del {
 background-color: red;
 width: 180rpx;
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: center;
 color: #fff;
 -webkit-transform: translateX(180rpx);
 transform: translateX(180rpx);
 -webkit-transition: all 0.4s;
 transition: all 0.4s;
}

.new-price {
 font-weight: 600;
 color: #ff503c;
 font-size: 35rpx;
}

.old-price {
 margin-left: 30rpx;
 text-decoration: line-through;
 font-size: 28rpx;
 color: #b1b1b1;
}

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

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

Javascript 相关文章推荐
JavaScript显示当然日期和时间即年月日星期和时间
Oct 29 Javascript
详解JavaScript对Date对象的操作问题(生成一个倒数7天的数组)
Oct 01 Javascript
JavaScript希尔排序、快速排序、归并排序算法
May 08 Javascript
第四篇Bootstrap网格系统偏移列和嵌套列
Jun 21 Javascript
简单实现js页面切换功能
Jan 10 Javascript
浅谈js中test()函数在正则中的使用
Aug 19 Javascript
Angular实现一个简单的多选复选框的弹出框指令实例
Apr 25 Javascript
jQuery+CSS实现的标签页效果示例【测试可用】
Aug 14 jQuery
vue 使用axios 数据请求第三方插件的使用教程详解
Jul 05 Javascript
js实现带积分弹球小游戏
Jul 21 Javascript
在Vue中使用CSS3实现内容无缝滚动的示例代码
Nov 27 Vue.js
Vue全家桶入门基础教程
May 14 Vue.js
jquery ui 实现 tab标签功能示例【测试可用】
Jul 25 #jQuery
小程序实现左滑删除效果
Jul 25 #Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
Jul 25 #Javascript
详解Vue.js和layui日期控件冲突问题解决办法
Jul 25 #Javascript
turn.js异步加载实现翻书效果
Jul 25 #Javascript
js 实现ajax发送步骤过程详解
Jul 25 #Javascript
MockJs结合json-server模拟后台数据
Aug 26 #Javascript
You might like
利用php来自动调用不同服务器上的flash
2006/10/09 PHP
PHP内置的Math函数效率测试
2014/12/01 PHP
php实现window平台的checkdnsrr函数
2015/05/27 PHP
PHP中使用substr()截取字符串出现中文乱码问题该怎么办
2015/10/21 PHP
mac系统下为 php 添加 pcntl 扩展
2016/08/28 PHP
PDO::errorInfo讲解
2019/01/28 PHP
一些易混淆且不常用的属性,希望有用
2007/01/29 Javascript
js在指定位置增加节点函数insertBefore()用法实例
2015/01/12 Javascript
JavaScript判断数组是否包含指定元素的方法
2015/07/01 Javascript
AngularJS ng-mousedown 指令
2016/08/02 Javascript
关于Javascript中defer和async的区别总结
2016/09/20 Javascript
Bootstrap分页插件之Bootstrap Paginator实例详解
2016/10/15 Javascript
详解小程序缓存插件(mrc)
2018/08/17 Javascript
配置一个vue3.0项目的完整步骤
2019/04/26 Javascript
JS页面获取 session 值,作用域和闭包学习笔记
2019/10/16 Javascript
Vue 实现显示/隐藏层的思路(加全局点击事件)
2019/12/31 Javascript
python基于queue和threading实现多线程下载实例
2014/10/08 Python
Python数据类型详解(二)列表
2016/05/08 Python
听歌识曲--用python实现一个音乐检索器的功能
2016/11/15 Python
VTK与Python实现机械臂三维模型可视化详解
2017/12/13 Python
对python xlrd读取datetime类型数据的方法详解
2018/12/26 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
wxPython实现列表增删改查功能
2019/11/19 Python
Pycharm中安装Pygal并使用Pygal模拟掷骰子(推荐)
2020/04/08 Python
Python Selenium异常处理的实例分析
2021/02/28 Python
Ray-Ban雷朋美国官网:全球领先的太阳眼镜品牌
2016/07/20 全球购物
6PM官网:折扣鞋、服装及配饰
2018/08/03 全球购物
颇特女士:NET-A-PORTER(直邮中国)
2020/07/11 全球购物
农业大学毕业生的个人自我评价
2013/10/11 职场文书
主题酒店策划书
2014/01/28 职场文书
10的分与合教学反思
2014/04/30 职场文书
法定代表人授权委托书格式
2014/10/14 职场文书
机关干部作风建设剖析材料
2014/10/23 职场文书
2016年第二十五次全国助残日活动总结
2016/04/01 职场文书
kubernetes集群搭建Zabbix监控平台的详细过程
2022/07/07 Servers
Windows server 2016服务器基本设置
2022/08/14 Servers