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


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 web页面刷新的方法收集
Jul 02 Javascript
jQuery选中select控件 无法设置selected的解决方法
Sep 01 Javascript
JS关键字变色实现思路及代码
Feb 21 Javascript
Javascript对象属性方法汇总
Nov 21 Javascript
JS实现倒计时和文字滚动的效果实例
Oct 29 Javascript
jQuery插件jcrop+Fileapi完美实现图片上传+裁剪+预览的代码分享
Apr 22 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
Feb 17 Javascript
原生js封装的一些jquery方法(详解)
Sep 20 Javascript
JS表格组件神器bootstrap table使用指南详解
Apr 12 Javascript
微信小程序使用npm支持踩坑
Nov 07 Javascript
JS数组求和的常用方法总结【5种方法】
Jan 14 Javascript
小程序实现录音上传功能
Nov 22 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与Java进行通信的实现方法
2013/10/21 PHP
PHP变量内存分配问题记录整理
2013/11/27 PHP
在Laravel5.6中使用Swoole的协程数据库查询
2018/06/15 PHP
详解PHP中curl_multi并发的实现
2020/06/08 PHP
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
Javascript中的getUTCDay()方法使用详解
2015/06/10 Javascript
JavaScript中数据结构与算法(五):经典KMP算法
2015/06/19 Javascript
Bootstrap源码解读标签、徽章、缩略图和警示框(8)
2016/12/26 Javascript
微信小程序中实现手指缩放图片的示例代码
2018/03/13 Javascript
Vue中v-show添加表达式的问题(判断是否显示)
2018/03/26 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
jQuery中getJSON跨域原理的深入讲解
2020/09/02 jQuery
[06:13]DOTA2进化论(修改版)
2013/10/08 DOTA
[01:12]快闪回顾DOTA2亚洲邀请赛(DAC) 静候2018新征程开启
2018/03/11 DOTA
[01:01]2020完美高校联赛(秋)西安落幕
2021/03/11 DOTA
python中的reduce内建函数使用方法指南
2014/08/31 Python
Python使用multiprocessing实现一个最简单的分布式作业调度系统
2016/03/14 Python
python 调用win32pai 操作cmd的方法
2017/05/28 Python
python中如何使用正则表达式的非贪婪模式示例
2017/10/09 Python
python音频处理用到的操作的示例代码
2017/10/27 Python
Python探索之实现一个简单的HTTP服务器
2017/10/28 Python
python和shell监控linux服务器的详细代码
2018/06/22 Python
浅析python标准库中的glob
2020/03/13 Python
如何使用python的ctypes调用医保中心的dll动态库下载医保中心的账单
2020/05/24 Python
一款利用html5和css3实现的3D滚动特效的教程
2015/01/04 HTML / CSS
CSS3自定义滚动条样式 ::webkit-scrollbar的示例代码详解
2020/06/01 HTML / CSS
塔吉特百货公司官网:Target
2017/04/27 全球购物
以设计师精品品质提供快速时尚:PopJulia
2018/01/09 全球购物
路政管理专业推荐信
2013/11/11 职场文书
幼儿园家长会欢迎词
2014/01/09 职场文书
联谊活动总结
2014/08/28 职场文书
基层干部群众路线教育实践活动个人对照检查材料
2014/09/23 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
2014幼儿园大班工作总结
2014/11/10 职场文书
寒假安全保证书
2015/02/28 职场文书
爱鸟护鸟的宣传语
2015/07/13 职场文书