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


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表单验证要注意的事项
Sep 29 Javascript
node.js中的http.createServer方法使用说明
Dec 14 Javascript
Angularjs 自定义服务的三种方式(推荐)
Aug 02 Javascript
node.js文件上传处理示例
Oct 27 Javascript
AngularJS中isolate scope的用法分析
Nov 22 Javascript
浅谈react+es6+webpack的基础配置
Aug 09 Javascript
React Native 通告消息竖向轮播组件的封装
Aug 25 Javascript
JavaScript作用域、闭包、对象与原型链概念及用法实例总结
Aug 20 Javascript
vue项目中实现图片预览的公用组件功能
Oct 26 Javascript
微信小程序实现一张或多张图片上传(云开发)
Sep 25 Javascript
Vue移动端实现图片上传及超过1M压缩上传
Dec 23 Javascript
前端vue+elementUI如何实现记住密码功能
Sep 20 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中Smarty模板初体验
2011/08/08 PHP
解析php curl_setopt 函数的相关应用及介绍
2013/06/17 PHP
preg_match_all使用心得分享
2014/01/31 PHP
PHP return语句的另一个作用
2014/07/30 PHP
php写入文件不覆盖的实例讲解
2019/09/17 PHP
js String对象中常用方法小结(字符串操作)
2012/01/27 Javascript
JavaScript高级程序设计(第3版)学习笔记12 js正则表达式
2012/10/11 Javascript
jquery Mobile入门—多页面切换示例学习
2013/01/08 Javascript
js 鼠标移动显示图片的简单实例
2013/12/25 Javascript
深入探讨javascript中的数据类型
2015/03/04 Javascript
js光标定位文本框回车表单提交问题的解决方法
2015/05/11 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
jQuery寻找n以内完全数的方法
2015/06/24 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
js学习总结之DOM2兼容处理重复问题的解决方法
2017/07/27 Javascript
Node.JS段点续传:Nginx配置文件分段下载功能的实现方法
2018/03/12 Javascript
js作用域和作用域链及预解析
2019/04/11 Javascript
微信小程序如何实现radio单选框单击打勾和取消
2020/01/21 Javascript
小程序实现录音功能
2020/09/22 Javascript
js实现简单的倒计时
2021/01/28 Javascript
使用Python的Treq on Twisted来进行HTTP压力测试
2015/04/16 Python
python中os模块详解
2016/10/14 Python
20个常用Python运维库和模块
2018/02/12 Python
对python读写文件去重、RE、set的使用详解
2018/12/11 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
如何基于python实现脚本加密
2019/12/28 Python
导出HTML5 Canvas图片并上传服务器功能
2019/08/16 HTML / CSS
FORZIERI澳大利亚站:全球顶级奢华配饰精品店
2016/12/31 全球购物
CLR与IL分别是什么含义
2016/08/23 面试题
小学教师节活动方案
2014/01/31 职场文书
《唯一的听众》教学反思
2014/02/20 职场文书
文员岗位职责范本
2014/03/08 职场文书
2014组织生活会方案
2014/05/19 职场文书
三严三实民主生活会发言稿
2014/10/13 职场文书
解决Pytorch半精度浮点型网络训练的问题
2021/05/24 Python
Windows11 Insider Preview Build 25206今日发布 更新内容汇总
2022/09/23 数码科技