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


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 相关文章推荐
JQuery获取文本框中字符长度的代码
Sep 29 Javascript
js中function()使用方法
Dec 24 Javascript
Firefox中使用outerHTML的2种解决方法
Jun 07 Javascript
javascript通过元素id和name直接取得元素的方法
Apr 28 Javascript
AngularJS的一些基本样式初窥
Jul 27 Javascript
Bootstarp基本模版学习教程
Feb 01 Javascript
jQuery实现简单漂亮的Nav导航菜单效果
Mar 29 jQuery
微信小程序中setInterval的使用方法
Sep 29 Javascript
React Component存在的几种形式详解
Nov 06 Javascript
Windows下安装 node 的版本控制工具 nvm
Feb 06 Javascript
解决vue与node模版引擎的渲染标记{{}}(双花括号)冲突问题
Sep 11 Javascript
Vue解决移动端弹窗滚动穿透问题
Dec 15 Vue.js
使用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
利用浏览器的Javascript控制台调试PHP程序
2014/01/08 PHP
ThinkPHP实现支付宝接口功能实例
2014/12/02 PHP
PHP开发中AJAX技术的简单应用
2015/12/11 PHP
一个简单的php MVC留言本实例代码(必看篇)
2016/09/22 PHP
jquery.validate分组验证代码
2011/03/17 Javascript
JavaScript中的细节分析
2012/06/30 Javascript
js 实现在离开页面时提醒未保存的信息(减少用户重复操作)
2013/01/16 Javascript
jQuery实现鼠标经过时出现隐藏层文字链接的方法
2015/10/12 Javascript
jquery实现简洁文件上传表单样式
2015/11/02 Javascript
基于jquery实现全屏滚动效果
2015/11/26 Javascript
Javascript中匿名函数的调用与写法实例详解(多种)
2016/01/26 Javascript
js实现分割上传大文件
2016/03/09 Javascript
JS DOMReady事件的六种实现方法总结
2016/11/23 Javascript
JS沙箱模式实例分析
2017/09/04 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
vue自定义移动端touch事件之点击、滑动、长按事件
2018/07/10 Javascript
解决Vue axios post请求,后台获取不到数据的问题方法
2018/08/11 Javascript
JavaScript模板引擎应用场景及实现原理详解
2018/12/14 Javascript
vue实现压缩图片预览并上传功能(promise封装)
2019/01/10 Javascript
vue操作dom元素的3种方法示例
2020/09/20 Javascript
python编写的最短路径算法
2015/03/25 Python
Python函数式编程指南(二):从函数开始
2015/06/24 Python
在ubuntu16.04中将python3设置为默认的命令写法
2018/10/31 Python
Python基础之变量基本用法与进阶详解
2020/01/03 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
Python爬虫抓取论坛关键字过程解析
2020/10/19 Python
Python通过yagmail实现发送邮件代码解析
2020/10/27 Python
PyCharm2019.3永久激活破解详细图文教程,亲测可用(不定期更新)
2020/10/29 Python
HTML5拖拽功能实现的拼图游戏
2018/07/31 HTML / CSS
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
房地产财务部员工岗位职责
2014/03/12 职场文书
社区文化建设方案
2014/05/02 职场文书
励志演讲稿200字
2014/08/21 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书
Python词云的正确实现方法实例
2021/05/08 Python
总结Python连接CS2000的详细步骤
2021/06/23 Python