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


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 语法集锦 脚本之家基础推荐
Nov 15 Javascript
JavaScript几种形式的树结构菜单
May 10 Javascript
js中单引号与双引号冲突问题解决方法
Oct 04 Javascript
js判断undefined类型示例代码
Feb 10 Javascript
jQuery右侧选项卡焦点图片轮播特效代码分享
Sep 05 Javascript
ES6新特性七:数组的扩充详解
Apr 21 Javascript
Node.js使用gm拼装sprite图片
Jul 04 Javascript
Koa项目搭建过程详细记录
Apr 12 Javascript
详解Vue单元测试case写法
May 24 Javascript
基于Bootstrap和JQuery实现动态打开和关闭tab页的实例代码
Jun 10 jQuery
jquery实现简易验证插件封装
Sep 13 jQuery
梳理一下vue中的生命周期
Dec 30 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
PHP获取网页标题的3种实现方法代码实例
2014/04/11 PHP
ThinkPHP模板比较标签用法详解
2014/06/30 PHP
php编程每天必学之验证码
2016/03/03 PHP
php中bind_param()函数用法分析
2017/03/28 PHP
PHP实现单例模式建立数据库连接的方法分析
2020/02/11 PHP
JavaScript SetInterval与setTimeout使用方法详解
2013/11/15 Javascript
jquery使用淘宝接口跨域查询手机号码归属地实例
2013/11/28 Javascript
用js一次改变多个input的readonly属性值的方法
2014/06/11 Javascript
jQuery+ajax实现动态执行脚本的方法
2015/01/27 Javascript
javascript实现列表切换效果
2016/05/02 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
React组件的三种写法总结
2017/01/12 Javascript
详解RequireJS按需加载样式文件
2017/04/12 Javascript
vue.js加载新的内容(实例代码)
2017/06/01 Javascript
深入理解JavaScript的值传递和引用传递
2018/10/24 Javascript
JavaScript 类的封装操作示例详解
2020/05/16 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
python中sets模块的用法实例
2014/09/30 Python
Python实现处理管道的方法
2015/06/04 Python
Python中防止sql注入的方法详解
2017/02/25 Python
Python中文分词工具之结巴分词用法实例总结【经典案例】
2017/04/15 Python
对Python3中bytes和HexStr之间的转换详解
2018/12/04 Python
Django ManyToManyField 跨越中间表查询的方法
2018/12/18 Python
Python数据结构与算法(几种排序)小结
2019/06/22 Python
基于numpy中的expand_dims函数用法
2019/12/18 Python
python怎么删除缓存文件
2020/07/19 Python
ECCO爱步官方旗舰店:丹麦鞋履品牌
2018/01/02 全球购物
美国Randolph太阳镜官网:美国制造的飞行员太阳镜和射击眼镜
2018/06/15 全球购物
您在慕尼黑的跑步商店:Lauf-bar
2019/10/11 全球购物
迪卡侬波兰体育用品商店:Decathlon波兰
2020/03/31 全球购物
3个CCIE对一个工程师的面试题
2012/05/06 面试题
高二学生评语大全
2014/04/25 职场文书
党员创先争优心得体会
2014/09/11 职场文书
2014年信访维稳工作总结
2014/12/08 职场文书
工程技术负责人岗位职责
2015/04/13 职场文书
Python中for后接else的语法使用
2021/05/18 Python