今天迁移支付宝小程序发现支付宝的API不完善,目前小程序滚动只能使用pageScrollTo,而支付宝小程序滚动位置只能在选择器和滚动目标位置二选一。
支付宝小程序
坑点来了,因为我使用的是自定义导航栏,如果使用选择器(为啥不用目标位置,狡辩一下,因为是内容是不确定的,使用选择器需要存储位置会浪费较多的性能,主要是我脑抽了),那么支付宝小程序会把顶部的导航栏当做选择器的起始位,即高度从手机顶部开始计算。
其实我想要的应该是往下开始一部分。
微信小程序
后来参考微信的API,发现多了一个offsetTop,可以实现选择器和位移的共存。
wx.pageScrollTo({
selector: `.tabNum-${tabNum}`,
offsetTop: -180,//偏移的位置
duration: 300,
});
解决方案
因为支付宝小程序没有提供,(就是我实在脑抽),另外想了一种滚动实现方案(支付宝小程序和微信小程序都可以使用)。
wxml
<view class="btn" ontap="scrollToElement">会员锚点1</view>
js
/**
* 滚动到指定位置处
*/
scrollToElement () {
let query = my.createSelectorQuery(); // 创建节点查询器
query.selectViewport().scrollOffset();
query.select('#inputArea').boundingClientRect(); // 选择id为inputAreat的节点并查询的它布局位置
query.exec(function(res) { //执行请求
my.pageScrollTo({
scrollTop: res[0].scrollTop + res[1].top + 200,//滚动到页面节点的上边界坐标,200是偏移量
duration: 300 // 滚动动画的时长
});
})
},