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


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的最佳方法分享
Oct 21 Javascript
ExtJS的拖拽效果示例
Dec 09 Javascript
导入extjs、jquery 文件时$使用冲突问题解决方法
Jan 14 Javascript
jquery实现下拉菜单的二级联动利用json对象从DB取值显示联动
Mar 27 Javascript
JavaScript中的Primitive对象封装介绍
Dec 31 Javascript
jQuery实现鼠标经过提示信息的地图热点效果
Apr 26 Javascript
Javascript对象字面量的理解
Jun 22 Javascript
AngularJS bootstrap启动详解及实例代码
Sep 14 Javascript
原生js封装运动框架的示例讲解
Oct 01 Javascript
JavaScript+H5实现微信摇一摇功能
May 23 Javascript
微信小程序点击生成朋友圈分享图(遇到的坑)
Jun 17 Javascript
vue 解决在微信内置浏览器中调用支付宝支付的情况
Nov 09 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中文本操作的类
2007/03/17 PHP
php tp验证表单与自动填充函数代码
2012/02/22 PHP
Laravel与CI框架中截取字符串函数
2016/05/08 PHP
Zend Framework入门应用实例详解
2016/12/11 PHP
PHP实现支付宝即时到账功能
2016/12/21 PHP
PHP cookie,session的使用与用户自动登录功能实现方法分析
2019/06/05 PHP
激活 ActiveX 控件
2006/10/09 Javascript
javascript Array.remove() 数组删除
2009/08/06 Javascript
javascript tips提示框组件实现代码
2010/11/19 Javascript
jQuery下通过replace字符串替换实现大小图片切换
2012/05/22 Javascript
Extjs4 类的定义和扩展实例
2013/06/28 Javascript
jQuery+css3动画属性制作猎豹浏览器宽屏banner焦点图
2015/03/16 Javascript
jQuery实现图片与文字描述左右滑动自动切换的方法
2015/07/27 Javascript
javascript中的五种基本数据类型
2015/08/26 Javascript
JQuery Ajax 异步操作之动态添加节点功能
2017/05/24 jQuery
AngularJS中的路由使用及实现代码
2017/10/09 Javascript
JS简单实现滑动加载数据的方法示例
2017/10/18 Javascript
详解vue-cli下ESlint 配置说明
2018/09/03 Javascript
基于Angular中ng-controller父子级嵌套的相关属性详解
2018/10/08 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
python 获取字符串MD5值方法
2018/05/29 Python
完美解决在oj中Python的循环输入问题
2018/06/25 Python
Dlib+OpenCV深度学习人脸识别的方法示例
2019/05/14 Python
python飞机大战pygame游戏之敌机出场实现方法详解
2019/12/17 Python
解决Python 异常TypeError: cannot concatenate 'str' and 'int' objects
2020/04/08 Python
Python 必须了解的5种高级特征
2020/09/10 Python
python 如何用urllib与服务端交互(发送和接收数据)
2021/03/04 Python
在阿尔卑斯山或希腊度过快乐假期:Alpine Elements
2019/12/28 全球购物
婚庆公司的创业计划书
2014/01/22 职场文书
小组名称和口号
2014/06/09 职场文书
2014年党员干部四风问题自我剖析材料
2014/09/29 职场文书
不听老师话的万能检讨书
2014/10/04 职场文书
2014年教学工作总结
2014/11/13 职场文书
迎新晚会主持词开场白
2015/05/28 职场文书
2015年毕业实习工作总结
2015/05/29 职场文书
辩护意见书
2015/06/04 职场文书