微信小程序点击滚动到指定位置的实现

公司项目要做一个类似微信通讯录导航的效果,点击右侧字母页面滚动到相应位置。因为微信小程序没有dom概念,所以不能使用锚点,

公司项目要做一个类似微信通讯录导航的效果,点击右侧字母页面滚动到相应位置。

WordPress主题下载,WordPress免费主题下载,网站源码模板下载

因为微信小程序没有dom概念,所以不能使用锚点,也不能直接获取对应字母相对页面的偏移位置。此时只能使用小程序创建对象实例的API获取节点信息:

let query = wx.createSelectorQuery().in(this);

query.selectViewport().scrollOffset()

query.select(“#Nav”).boundingClientRect();

query.select(“#FilterNav”).boundingClientRect();

query.select(“#”+((letter==’#’)?’other’:letter)).boundingClientRect();

query.exec(function (res) {

let scrollTop = 0;

if(res[3]){

scrollTop = res[0].scrollTop + res[3].top

}else{

scrollTop = res[0].scrollTop;

}

wx.pageScrollTo({

scrollTop: scrollTop – res[1].height – res[2].height,

duration: 300

});

});

解释一下该代码的意思:

1.先创建节点对象,wx.createSelectorQuery()返回一个对象实例;

2.选择显示区域;

3.调用select方法,传入节点的id值,可在同一节点对象进行多次调用,最后会返回数组结果(上图中滚动区域距离页面顶部是有两个导航栏高度的距离的,所以查询了两次导航栏);

4.exec()回调方法中可以获取所查询所有节点的信息,数组第一条为页面的位置信息(滚动距离),获取到对应字母节点的top值为节点相对于屏幕顶部的位置

结果:页面滚动位置 = 页面滚动距离 + 字母节点相对屏幕高度距离 – 头部导航条高度 – 菜单栏高度

wx.pageScrollTo()调用API页面滚动

如果是让滚动容器滚动到指定位置,计算位置会有一点不同:

WordPress主题下载,WordPress免费主题下载,网站源码模板下载

var query = wx.createSelectorQuery().in(this);

query.select(“#swiper”).boundingClientRect();

query.select(“#”+ letter).fields({ rect:true,scrollOffset:true });

query.selectViewport().scrollOffset()

query.exec((res)=>{

_this.setData({

letterScrolltop: res[1].top – res[0].top

})

});

上图因为是弹出框里的内容,所以列表放在scroll-view滚动容器中,和上面不一样的是滚动位置是:滚动容器距离页面顶部距离 – 锚点距离页面顶部距离,将计算后的偏移量修改至对应scroll-view容器的scroll-top属性就行了。

到此这篇关于微信小程序点击滚动到指定位置的实现的文章就介绍到这了,希望大家以后多多支持!

WordPress主题下载,WordPress免费主题下载,网站源码模板下载


下载说明:
1. 本站所有资源来源于网络和用户上传,如有侵权请联系站长
2. 本站分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,商用请支持正版!不得违反国家法律,否则后果自负!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!

本站的资源均来自于互联网,仅为资源共享、学习参考之目的,其版权均归原作者及其网站所有,如有侵权请留言联系:admin,转转请注明出处:http://zhanmr.com/6986.htm

发表评论

电子邮件地址不会被公开。 必填项已用*标注