2

背景

最近在开发小程序的时候,遇到一个在页面上做锚点的需求

查阅了一下,小程序的锚点和浏览器中html的锚点是不一样的,所以不能用 a 标签加 #锚点 来实现

scroll-view实现

通常,在小程序中,可以用scroll-view标签的scroll-into-view属性进行跳转,这是网上常见的方法,具体方法,就不详细说了,可以参考这篇文章 微信小程序-锚点定位

但是scroll-view实现的锚点有一些缺点:

计算高度实现

这个方法的基本思路是:计算出锚点相对于页面的高度,使用wx.pageScrollTo滚动到锚点位置

具体方法如下:

首先,计算出锚点元素相对于当前可视区域的高度,即元素和小程序title的距离,文档 wx.createSelectorQueryfields

wx.createSelectorQuery().select('#anchor').fields({
    rect: true
}, function (res) {
    a = res.top
}

然后,计算出当前页面滚动的高度,即html中的scrollTop,即页面元素顶部距离小程序title的距离,文档 scrollOffset

wx.createSelectorQuery().selectViewport().scrollOffset(function(res){
    b = res.scrollTop
})

最后,使用wx.pageScrollTo滚动到锚点位置,文档 wx.pageScrollTo

wx.pageScrollTo({
    scrollTop: a + b
});

abuya
23 声望0 粉丝