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


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 相关文章推荐
抽出www.templatemonster.com的鼠标悬停加载大图模板的代码
Jul 11 Javascript
jQuery 使用手册(四)
Sep 23 Javascript
Jquery同辈元素选中/未选中效果的实例代码
Aug 01 Javascript
EasyUI,点击开启编辑框,并且编辑框获得焦点的方法
Mar 01 Javascript
JavaScript把数组作为堆栈使用的方法
Mar 20 Javascript
javascript文本模板用法实例
Jul 31 Javascript
JS实现支持多选的遍历下拉列表代码
Aug 20 Javascript
javascript的几种写法总结
Sep 30 Javascript
js学习总结之DOM2兼容处理this问题的解决方法
Jul 27 Javascript
解决在vue项目中,发版之后,背景图片报错,路径不对的问题
Mar 06 Javascript
详解javascript replace高级用法
Feb 17 Javascript
layui 监听select选择 获取当前select的ID名称方法
Sep 24 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 模拟$_PUT实现代码
2010/03/15 PHP
实战mysql导出中文乱码及phpmyadmin导入中文乱码的解决方法
2010/06/11 PHP
怎样使用php与jquery设置和读取cookies
2013/08/08 PHP
php通过正则表达式记取数据来读取xml的方法
2015/03/09 PHP
CI框架文件上传类及图像处理类用法分析
2016/05/18 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
Aster vs KG BO3 第二场2.18
2021/03/10 DOTA
可拖动窗口,附带鼠标控制渐变透明,开启关闭功能
2006/06/26 Javascript
分享一个我自己写的ToolTip提示插件(附源码)
2013/01/20 Javascript
js+css实现增加表单可用性之提示文字
2013/06/03 Javascript
node.js中的定时器nextTick()和setImmediate()区别分析
2014/11/26 Javascript
js点击文本框后才加载验证码实例代码
2015/10/20 Javascript
js点击返回跳转到指定页面实现过程
2020/08/20 Javascript
最佳的JavaScript错误处理实践
2016/07/16 Javascript
使用React实现轮播效果组件示例代码
2016/09/05 Javascript
浅谈 vue 中的 watcher
2017/12/04 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
javascript标准库(js的标准内置对象)总结
2018/05/26 Javascript
layui实现左侧菜单点击右侧内容区显示
2019/07/26 Javascript
Node.js利用Express实现用户注册登陆功能(推荐)
2020/10/26 Javascript
Python格式化压缩后的JS文件的方法
2015/03/05 Python
浅谈Python的list中的选取范围
2018/11/12 Python
浅谈python 读excel数值为浮点型的问题
2018/12/25 Python
Python3.5字符串常用操作实例详解
2019/05/01 Python
Python中断多重循环的几种方式详解
2020/02/10 Python
Python学习之路安装pycharm的教程详解
2020/06/17 Python
解决pyinstaller 打包exe文件太大,用pipenv 缩小exe的问题
2020/07/13 Python
Python request中文乱码问题解决方案
2020/09/17 Python
Nordgreen美国官网:在线购买极简主义斯堪的纳维亚手表
2019/07/24 全球购物
运动鞋、足球鞋和慕尼黑球衣:Sport Münzinger
2019/08/26 全球购物
运动会解说词100字
2014/01/31 职场文书
大学生求职信范文
2014/05/24 职场文书
酒店节能减排方案
2014/05/26 职场文书
建筑工地标语
2014/06/18 职场文书
财务管理专业自荐书
2014/09/02 职场文书
物业工程部岗位职责
2015/02/11 职场文书