uni-app 微信小程序 模仿 app二层楼功能

uni-app 微信小程序 模仿 app二层楼功能

先占个坑,今天应该写不完, 后续在慢慢补全
更新 终于写完了

这个的计算量很大,我自己的安卓机测试的时候一卡一卡的,公司同事的iphone是没有问题的

我接到有一个这样的需求,页面是一个门店的首页,在正常页面的下面有一张海报图,前面的内容要露出大约100px的高度,然后下面的就是主要内容 , 但是你在拉主要内容这个元素的时候,慢慢拉会有下拉刷新回弹的效果,拉到一定程度的时候,前面的主要内容掉下去,展示后面的海报图。 等到后续在下面向上拉的时候,在回弹回来。这个有点像淘宝的二层楼。

下面来做一下分析
下拉二层楼的时候 他还会有一个下拉刷新的功能 到一定的距离的时候,就能够自己向下掉下去,不到一定距离的时候,会回弹。

下面的是template的布局

<view class="warp">
	<view class="behind"></view>
	<view class="front"></view>
</view>

上面的是整个HTML的布局
warp这个类的时候需要给上相对定位
然后front 这个类上的给上绝对定位

这个时候 我们就有以下2个步骤来写这个下拉的事件
1、使用动画控制front 这个类的top值
2、使用偏移控制Y值

下面我们需要给前面的 view 中 添加触摸事件 @touchmove="moveHandle1" @touchstart="touchstart1" @touchend="touchend"

touchstart1 这个方法中,我们可以拿到我们手指点下去的位置信息

touchstart1(event) {
   
	// 这里是拿到手指点击下去的位置 其实重点是我这里想拿到 Y 的值,保存起来
	console.log(event)
	this.touchstartWhere = event.changedTouches[0].pageY
}
// 这个方法是手指在移动的过程中,是下拉还是上拉
// 使用同样的方法,我们可以得到这个之间的差值,使用 difference 标记保存
moveHandle1(event) {
   
	
}

由上面我们可以知道我们下滑的距离 即把difference的值赋值给 偏移的量
这个时候需要在前面的view中, 加上这一行 :style="{transform:translateY(${difference}px)}" ,这个时候,你下拉多少的时候,就能够Y值偏移多少,这个时候,我们已经能够让他下拉, 这个时候,我们就要考虑放开手手的时候了

touchend() {
   
	// 
}

这个里面,我们需要的是difference 这个值是不是在你自己定义的数据值之内,如果是的话,那么久直接回弹,回弹的时候不能直接设置difference=0 这样的话会直接上去,没有一点回弹感觉。

下面的这个地方回弹的代码 我这里设置的是100

touchend() {
   
	if (this.difference < 100) {
   
       let that = this
       function slidingRebound(timeout) {
   
           // 被要求停止回弹?
           if (that.movingback == false) {
   
               return
           }
           if (that.difference > 0) {
   
               that.difference -= 1
               setTimeout(slidingRebound, timeout)
           } else {
   
               that.difference = 0
               that.movingback = false
               that.opacity = 0.3
           }
       }
       that.movingback = true    // 标志目前正在回弹,其他地方可能会置false
       slidingRebound(2)
   }
}

如果超过你设置的这个值,这个时候,他需要的后面的view出来,这个时候,我们还是可以设置top值 和偏移量,我们手手离开的时候,我这里是做了隐藏。和使用动画把top值给变大了 ,这样下拉下去的时候会看起来舒服多了,显示隐藏一定要写,不然,你即使设置了top值很大

评论 40
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值