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


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 EasyUI 的EasyLoader功能介绍
Sep 12 Javascript
javascript中的delete使用详解
Apr 11 Javascript
QQ登录背景闪动效果附效果演示源码下载
Sep 22 Javascript
详解Angular中$cacheFactory缓存的使用
Aug 19 Javascript
JavaScript屏蔽Backspace键的实现代码
Nov 02 Javascript
js判断文件类型大小并给出提示的实现方法
Jan 03 Javascript
vue如何获取自定义元素属性参数值的方法
May 14 Javascript
bootstrap table.js动态填充单元格数据的多种方法
Jul 18 Javascript
关于Layui Table隐藏列问题
Sep 16 Javascript
使用Vue-cli3.0创建的项目 如何发布npm包
Oct 10 Javascript
Vue.js中的高级面试题及答案
Jan 13 Javascript
react结合bootstrap实现评论功能
May 30 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
MongoDB在PHP中的常用操作小结
2014/02/20 PHP
脚本吧 - 幻宇工作室用到js,超强推荐share.js
2006/12/23 Javascript
Javascript valueOf 使用方法
2008/12/28 Javascript
Javascript调用C#代码
2011/01/17 Javascript
javascript获取所有同类checkbox选项(实例代码)
2013/11/07 Javascript
js判断某个方法是否存在实例代码
2015/01/10 Javascript
老生常谈原生JS执行环境与作用域
2016/11/22 Javascript
nodejs实例解析(输出hello world)
2017/01/03 NodeJs
深入理解AngularJS中的ng-bind-html指令
2017/03/27 Javascript
vue.js $refs和$emit 父子组件交互的方法
2017/12/20 Javascript
微信小程序App生命周期详解
2018/01/31 Javascript
微信小程序使用template标签实现五星评分功能
2018/11/03 Javascript
探索JavaScript中私有成员的相关知识
2019/06/13 Javascript
在vue中高德地图引入和轨迹的绘制的实现
2019/10/11 Javascript
Python第三方库xlrd/xlwt的安装与读写Excel表格
2017/01/21 Python
Python数据操作方法封装类实例
2017/06/23 Python
PyQt5实现类似别踩白块游戏
2019/01/24 Python
python实现翻转棋游戏(othello)
2019/07/29 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
pandas条件组合筛选和按范围筛选的示例代码
2019/08/26 Python
Python如何使用Gitlab API实现批量的合并分支
2019/11/27 Python
Python实现投影法分割图像示例(一)
2020/01/17 Python
python3连接mysql获取ansible动态inventory脚本
2020/01/19 Python
DataFrame 数据合并实现(merge,join,concat)
2020/06/14 Python
python爬虫beautifulsoup解析html方法
2020/12/07 Python
python RSA加密的示例
2020/12/09 Python
想学画画?python满足你!
2020/12/24 Python
联想加拿大官方网站:Lenovo Canada
2018/04/05 全球购物
Allen Edmonds官方网站:一家美国优质男士鞋类及配饰制造商
2019/03/12 全球购物
澳洲的UGG雪地靴超级市场:Uggs.com.au
2020/04/06 全球购物
会计主管岗位职责
2014/01/03 职场文书
运动会表扬稿大全
2014/01/16 职场文书
网上签名寄语活动留言
2014/01/18 职场文书
领导干部考察材料
2014/02/08 职场文书
Python scrapy爬取起点中文网小说榜单
2021/06/13 Python
vue实现在data里引入相对路径
2022/06/05 Vue.js