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


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 相关文章推荐
用roll.js实现的图片自动滚动+鼠标触动的特效
Mar 18 Javascript
jQuery+正则+文本框只能输入数字的实现方法
Oct 07 Javascript
vue中用动态组件实现选项卡切换效果
Mar 25 Javascript
angularjs中使用ng-bind-html和ng-include的实例
Apr 28 Javascript
xmlplus组件设计系列之图标(ICON)(1)
May 05 Javascript
认识jQuery的Promise的具体使用方法
Oct 10 jQuery
详解JS函数stack size计算方法
Jun 18 Javascript
jQuery添加新内容的四个常用方法分析【append,prepend,after,before】
Mar 19 jQuery
浅谈javascript错误处理
Aug 11 Javascript
微信小程序 搜索框组件代码实例
Sep 06 Javascript
ant design vue datepicker日期选择器中文化操作
Oct 28 Javascript
详解JavaScript中的执行上下文及调用堆栈
Apr 29 Javascript
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中的正规表达式(二)
2006/10/09 PHP
七款最流行的PHP本地服务器分享
2013/02/19 PHP
combox改进版 页面原型参考dojo的,比网上jQuery的那些combox功能强,代码更小
2010/04/15 Javascript
jquery 与NVelocity 产生冲突的解决方法
2011/06/13 Javascript
document.documentElement的一些使用技巧
2013/04/18 Javascript
jQuery动态设置form表单的enctype值(实现代码)
2013/07/04 Javascript
浅析LigerUi开发中谨慎载入common.css文件
2013/07/09 Javascript
Jquery Ajax解析XML数据(同步及异步调用)简单实例
2014/02/12 Javascript
NodeJS Express框架中处理404页面一个方式
2014/05/28 NodeJs
浅谈Javascript变量作用域问题
2014/12/16 Javascript
jQuery实现当前页面标签高亮显示的方法
2015/03/10 Javascript
JQuery简单实现锚点链接的平滑滚动
2015/05/03 Javascript
JavaScript中对DOM节点的访问、创建、修改、删除
2015/11/16 Javascript
JavaScript知识点总结之如何提高性能
2016/01/15 Javascript
JS代码实现table数据分页效果
2016/05/26 Javascript
jQuery事件用法详解
2016/10/06 Javascript
Dropzone.js实现文件拖拽上传功能(附源码下载)
2016/11/22 Javascript
利用node.js爬取指定排名网站的JS引用库详解
2017/07/25 Javascript
Vue自定义事件(详解)
2017/08/19 Javascript
基于Vue渲染与插件的加载顺序的问题详解
2018/03/05 Javascript
jQuery阻止事件冒泡实例分析
2018/07/03 jQuery
jquery实现简单自动轮播图效果
2020/07/29 jQuery
[01:42]辉夜杯战队访谈宣传片—FANTUAN
2015/12/25 DOTA
python实现根据图标提取分类应用程序实例
2014/09/28 Python
用Python展示动态规则法用以解决重叠子问题的示例
2015/04/02 Python
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
python pandas dataframe 行列选择,切片操作方法
2018/04/10 Python
pytest中文文档之编写断言
2019/09/12 Python
python计算n的阶乘的方法代码
2019/10/25 Python
在Python中用GDAL实现矢量对栅格的切割实例
2020/03/11 Python
python中使用input()函数获取用户输入值方式
2020/05/03 Python
国际贸易专业个人求职信格式
2014/02/02 职场文书
基层党组织公开承诺书
2014/03/28 职场文书
关于感恩的演讲稿400字
2014/08/26 职场文书
毕业设计指导教师评语
2014/12/30 职场文书
2015人事行政工作总结范文
2015/05/21 职场文书