上效果图
原始:
手指摸着下面白色区域可以往下移动
手指松开后恢复原始状态
- 在白色内容所在区域添加触摸事件
<view class="cover-container" bindtouchstart="handleTouchStart"
bindtouchmove="handleTouchMove" bindtouchend="handleToucheEnd"
style="transform: {{coverTransform}};transition: {{coverTransition}}">
...
</view>
- 在js页面写逻辑
//定义所需变量
var startY = 0;
var moveY = 0;
var moveDistance = 0;
//手指触摸动作开始
handleTouchStart(event) {
//如果不加这句,会导致第二次触摸移动的时候带过滤动效,但是需求是只用回弹的时候带动效
this.setData({
coverTransition: ''
});
startY = event.touches[0].clientY;
},
//手指触摸后移动
handleTouchMove(event) {
moveY = event.touches[0].clientY;
moveDistance = moveY - startY;
//只能向下移动
if (moveDistance <= 0) {
return;
}
//规定的最大移动距离
if (moveDistance >= 80) {
moveDistance = 80;
}
this.setData({
coverTransform: `translateY(${moveDistance}rpx)`
});
},
//手指触摸动作结束
handleToucheEnd() {
this.setData({
coverTransform: `translateY(0)`,
coverTransition: 'transform 1s linear'
});
}