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


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 相关文章推荐
JXTree对象,读取外部xml文件数据,生成树的函数
Apr 02 Javascript
关于javascript中的parseInt使用技巧
Sep 03 Javascript
在for循环中length值是否需要缓存
Jul 27 Javascript
理解JavaScript表单的基础知识
Jan 25 Javascript
DOM操作和jQuery实现选项移动操作的简单实例
Jun 07 Javascript
js字符串引用的两种方式(必看)
Sep 18 Javascript
Vue数据驱动模拟实现4
Jan 12 Javascript
vue使用iframe嵌入网页的示例代码
Jun 09 Javascript
用Cordova打包Vue项目的方法步骤
Feb 02 Javascript
vue2 拖动排序 vuedraggable组件的实现
Aug 08 Javascript
使用原生JS实现火锅点餐小程序(面向对象思想)
Dec 10 Javascript
AJAX实现指定部分页面刷新效果
Oct 16 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
《心理测量者3》剧场版动画预告
2020/03/02 日漫
PHP 程序员应该使用的10个组件
2009/10/31 PHP
PHP编程函数安全篇
2013/01/08 PHP
PHP学习笔记(二) 了解PHP的基本语法以及目录结构
2014/08/04 PHP
解读PHP的Yii框架中请求与响应的处理流程
2016/03/17 PHP
Yii2 队列 shmilyzxt/yii2-queue 简单概述
2017/08/02 PHP
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
Javascript 错误处理的几种方法
2009/06/13 Javascript
jQuery EasyUI API 中文文档 - ComboBox组合框
2011/10/07 Javascript
分享精心挑选的12款优秀jQuery Ajax分页插件和教程
2012/08/09 Javascript
javascript 中that的含义示例介绍
2014/05/14 Javascript
关于jQuery判断元素是否存在的问题示例探讨
2014/07/21 Javascript
javascript+html5实现仿flash滚动播放图片的方法
2015/04/27 Javascript
JavaScript中的getTime()方法使用详解
2015/06/10 Javascript
深入理解Nodejs Global 模块
2017/06/03 NodeJs
为什么要使用Vuex的介绍
2019/01/19 Javascript
node中使用log4js4.x版本记录日志的方法
2019/08/20 Javascript
layer提示框添加多个按钮选择的实例
2019/09/12 Javascript
微信小程序本地存储实现每日签到、连续签到功能
2019/10/09 Javascript
Node.js API详解之 tty功能与用法实例分析
2020/04/27 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
JavaScript事件概念详解(区分静态注册和动态注册)
2021/02/05 Javascript
python 示例分享---逻辑推理编程解决八皇后
2014/07/20 Python
python通过smpt发送邮件的方法
2015/04/30 Python
Python cookbook(数据结构与算法)保存最后N个元素的方法
2018/02/13 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
Tensorflow安装问题: Could not find a version that satisfies the requirement tensorflow
2020/04/20 Python
Python 抓取数据存储到Redis中的操作
2020/07/16 Python
施华洛世奇德国官网:SWAROVSKI德国
2017/02/01 全球购物
沃达丰英国有限公司:Vodafone英国
2019/04/16 全球购物
英国亚马逊官方网站:Amazon.co.uk
2019/08/09 全球购物
英国DIY和家居装饰领域的主要品牌:Wickes
2019/11/26 全球购物
入党积极分子思想汇报
2014/01/02 职场文书
出生证明格式
2015/06/15 职场文书
大学三好学生主要事迹范文
2015/11/03 职场文书
详解Python中下划线的5种含义
2021/07/15 Python