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


Posted in Javascript onMay 22, 2020

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

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

因为微信小程序没有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页面滚动

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

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

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属性就行了。

到此这篇关于微信小程序点击滚动到指定位置的实现的文章就介绍到这了,更多相关小程序点击滚动到指定位置内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
JavaScript的面向对象(一)
Nov 09 Javascript
JavaScript开发规范要求(规范化代码)
Aug 16 Javascript
js读写(删除)Cookie实例详解
Apr 17 Javascript
jquery中$.post()方法的简单实例
Feb 04 Javascript
jquery easyui 对于开始时间小于结束时间的判断示例
Mar 22 Javascript
JavaScript获取鼠标移动时的坐标(兼容IE8、chome谷歌、Firefox)
Sep 13 Javascript
详解Angular之constructor和ngOnInit差异及适用场景
Jun 22 Javascript
Vue列表页渲染优化详解
Jul 24 Javascript
JS图片延迟加载插件LazyImgv1.0用法分析【附demo源码下载】
Sep 04 Javascript
Js利用console计算代码运行时间的方法示例
Sep 24 Javascript
如何将百度地图包装成Vue的组件的方法步骤
Feb 12 Javascript
JavaScript前端面试组合函数
Jun 21 Javascript
使用JavaScript通过前端发送电子邮件
May 22 #Javascript
uni-app微信小程序登录授权的实现
May 22 #Javascript
jQuery 选择器用法实例分析【prev + next】
May 22 #jQuery
jQuery--遍历操作实例小结【后代、同胞及过滤】
May 22 #jQuery
uni-app使用微信小程序云函数的步骤示例
May 22 #Javascript
AutoJs实现刷宝短视频的思路详解
May 22 #Javascript
jquery更改元素属性attr()方法操作示例
May 22 #jQuery
You might like
php 高效率写法 推荐
2010/02/21 PHP
ThinkPHP3.1数据CURD操作快速入门
2014/06/19 PHP
教你如何开启shopnc b2b2c 伪静态
2014/10/21 PHP
页面利用渐进式JPEG来提升用户体验度
2014/12/01 PHP
php创建、获取cookie及基础要点分析
2015/01/26 PHP
php实现将wav文件转换成图像文件并在页面中显示的方法
2015/04/21 PHP
PHP 并发场景的几种解决方案
2019/06/14 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
jQuery中Ajax全局事件引用方式及各个事件(全局/局部)执行顺序
2016/06/02 Javascript
使用Bootstrap美化按钮实例代码(demo)
2017/02/03 Javascript
xmlplus组件设计系列之文本框(TextBox)(3)
2017/05/03 Javascript
weui框架实现上传、预览和删除图片功能代码
2017/08/24 Javascript
微信小程序实现点击按钮移动view标签的位置功能示例【附demo源码下载】
2017/12/06 Javascript
JS实现的简单下拉框联动功能示例
2018/05/11 Javascript
详解如何制作并发布一个vue的组件的npm包
2018/11/10 Javascript
微信小程序的授权实现过程解析
2019/08/02 Javascript
vue中后端做Excel导出功能返回数据流前端的处理操作
2020/09/08 Javascript
[03:15]DOTA2-DPC中国联赛1月22日Recap集锦
2021/03/11 DOTA
python网络编程之TCP通信实例和socketserver框架使用例子
2014/04/25 Python
Python的Django框架中URLconf相关的一些技巧整理
2015/07/18 Python
python pyinstaller 加载ui路径方法
2019/06/10 Python
Python多线程及其基本使用方法实例分析
2019/10/29 Python
Python 实现日志同时输出到屏幕和文件
2020/02/19 Python
详解CSS3中的box-sizing(content-box与border-box)
2019/04/19 HTML / CSS
HTML5 Canvas 实现圆形进度条并显示数字百分比效果示例
2017/08/18 HTML / CSS
html2canvas截图空白问题的解决
2020/03/24 HTML / CSS
Opodo英国旅游网站:预订廉价航班、酒店和汽车租赁
2018/07/14 全球购物
自荐信包含哪些内容
2013/10/30 职场文书
六查六看剖析材料
2014/02/15 职场文书
安全生产汇报材料
2014/02/17 职场文书
员工保密承诺书
2014/05/28 职场文书
党课培训心得体会
2014/09/02 职场文书
2016教师读书思廉心得体会
2016/01/23 职场文书
《风筝》教学反思
2016/02/23 职场文书
2020年个人安全保证书参考模板
2020/01/08 职场文书
Spring Cache和EhCache实现缓存管理方式
2021/06/15 Java/Android