先上效果图
↓ ↓ ↓ ↓ ↓ ↓
滑动之前
滑动之后
觉得效果图不错的朋友请继续往下看
↓ ↓ ↓ ↓ ↓ ↓
先上一段html代码
<view class="touch-item {{isTouchMove ? 'touch-move-active' : ''}}" bindtouchstart="touchstart" bindtouchmove="touchmove" >
<navigator class="content" hover-class="none">
<image class="item_img" src="../image/image1.png" />
<view class="item_title">德国Nestlé雀巢BEBA贝巴适度水解奶粉3段(10个月以上)800g</view>
</navigator>
<view class="del" catchtap="del" >删除</view>
</view>
下面是css
.touch-item {
font-size: 14px;
display: flex;
justify-content: space-between;
border-bottom: 1px solid #ccc;
width: 100%;
overflow: hidden;
}
.content {
width: 100%;
padding: 10px;
margin-right: 0;
-webkit-transition: all 0.4s;
transition: all 0.4s;
-webkit-transform: translateX(90px);
transform: translateX(90px);
margin-left: -90px;
background-color: #fff;
}
.item_img {
float: left;
width: 100rpx;
height: 100rpx;
vertical-align: middle;
}
.item_title {
padding-right: 25rpx;
line-height: 200%;
font-size: 28rpx;
text-overflow: ellipsis;
overflow: hidden;
display: -webkit-box;
-webkit-line-clamp: 2;
-webkit-box-orient: vertical;
padding-left: 20rpx;
}
.del {
background-color: orangered;
width: 90px;
display: flex;
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);
}
//手指触摸动作开始 记录起点X坐标
touchstart: function (e) {
//开始触摸时 重置样式,并记录触摸位置
this.setData({
startX: e.changedTouches[0].clientX,
startY: e.changedTouches[0].clientY,
isTouchMove : this.data.isTouchMove ? !this.data.isTouchMove : this.data.isTouchMove;
})
},
//滑动事件处理
touchmove: function (e) {
var that = this,
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 });
var isTouchMove
//滑动超过30度角 return
if (Math.abs(angle) > 30) return;
if (touchMoveX > startX){ //右滑
isTouchMove = false
}else{ //左滑
isTouchMove = true
}
//更新数据
that.setData({
isTouchMove : isTouchMove
})
},
/**
* 计算滑动角度
* @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);
}
ps:如有错误,欢迎指正。共同学习,共同进步
更多专业前端知识,请上 【猿2048】www.mk2048.com