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


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 相关文章推荐
js onpropertychange输入框 事件获取属性
Mar 26 Javascript
jquery入门—数据删除与隔行变色以及图片预览
Jan 07 Javascript
js 点击页面其他地方关闭弹出层(示例代码)
Dec 24 Javascript
javascript不同类型数据之间的运算的转换方法
Feb 13 Javascript
jquery数组封装使用方法分享(jquery数组遍历)
Mar 25 Javascript
JS动态加载当前时间的方法
Feb 09 Javascript
javascript版2048小游戏
Mar 18 Javascript
JavaScript转换二进制编码为ASCII码的方法
Apr 16 Javascript
JS简单限制textarea内输入字符数量的方法
Oct 14 Javascript
微信小程序中使用Promise进行异步流程处理的实例详解
Aug 17 Javascript
jquery实现图片放大镜效果
Dec 23 jQuery
在 HTML 页面中使用 React的场景分析
Jan 18 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递归获取目录内文件(包含子目录)封装类分享
2013/12/25 PHP
Laravel中前端js上传图片到七牛云的示例代码
2017/09/04 PHP
Laravel修改验证提示信息为中文的示例
2019/10/23 PHP
js三种排序算法分享
2012/08/16 Javascript
IE8对JS通过属性和数组遍历解析不一样的地方探讨
2013/05/06 Javascript
IE6已终止操作问题的2种情况及解决
2014/04/23 Javascript
Node.js插件的正确编写方式
2014/08/03 Javascript
js事件监听机制(事件捕获)总结
2014/08/08 Javascript
JavaScript极简入门教程(二):对象和函数
2014/10/25 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
jquery用ajax方式从后台获取json数据后如何将内容填充到下拉列表
2015/08/26 Javascript
AngularJS教程 ng-style 指令简单示例
2016/08/03 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
input file上传 图片预览功能实例代码
2016/10/25 Javascript
简单实现JavaScript图片切换效果
2016/11/28 Javascript
jQuery实现分页功能(含ajax请求、后台数据、附完整demo)
2017/04/03 jQuery
Vue.js划分组件的方法
2017/10/29 Javascript
vue项目打包后打开页面空白解决办法
2018/06/29 Javascript
使用vue-router与v-if实现tab切换遇到的问题及解决方法
2018/09/07 Javascript
在 Vue 中使用 JSX 及使用它的原因浅析
2020/02/10 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
[51:53]完美世界DOTA2联赛决赛日 Inki vs LBZS 第二场 11.08
2020/11/10 DOTA
python 中的列表解析和生成表达式
2011/03/10 Python
Django 多环境配置详解
2019/05/14 Python
解决pycharm中的run和debug失效无法点击运行
2020/06/09 Python
python中round函数如何使用
2020/06/19 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
精灵市场:Pixie Market
2019/06/18 全球购物
中专生自我鉴定范文
2013/12/19 职场文书
职业生涯规划书范文
2014/03/10 职场文书
《泉水》教学反思
2014/04/11 职场文书
酒店办公室主任岗位职责
2015/04/01 职场文书
大队委员竞选稿
2015/11/20 职场文书
Python中json.load()和json.loads()有哪些区别
2021/06/07 Python
mysql事务对效率的影响分析总结
2021/10/24 MySQL
Redis实现一个账号只能登录一个设备
2022/04/19 Redis