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


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的两个ListBox子项互相调整的实现代码
May 07 Javascript
深入解析contentWindow, contentDocument
Jul 04 Javascript
jQuery制作的别致导航有阴影背景高亮模式窗口
Apr 15 Javascript
深入分析JSONP跨域的原理
Dec 10 Javascript
基于Jquery实现仿百度百科右侧导航代码附源码下载
Nov 27 Javascript
jQuery实现查找链接文字替换属性的方法
Jun 27 Javascript
jQuery弹出层插件popShow(改进版)用法示例
Jan 23 Javascript
bootstrap PrintThis打印插件使用详解
Feb 20 Javascript
Angular2数据绑定详解
Apr 18 Javascript
angular6.0使用教程之父组件通过url传递id给子组件的方法
Jun 30 Javascript
angular6 利用 ngContentOutlet 实现组件位置交换(重排)
Nov 02 Javascript
jquery实现穿梭框功能
Jan 19 jQuery
使用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中看实例学正则表达式
2006/12/25 PHP
php使用base64加密解密图片示例分享
2014/01/20 PHP
php多次include后导致全局变量global失效的解决方法
2015/02/28 PHP
PHP添加图片水印、压缩、剪切的封装类
2015/08/17 PHP
解决laravel groupBy 对查询结果进行分组出现的问题
2019/10/09 PHP
js版本A*寻路算法
2006/12/22 Javascript
兼容多浏览器的字幕特效Marquee的通用js类
2008/07/20 Javascript
Javascript匿名函数的一种应用 代码封装
2010/06/27 Javascript
鼠标放在图片上显示大图的JS代码
2013/03/26 Javascript
jQuery实现视频作为全屏幕背景
2014/12/18 Javascript
jQuery背景插件backstretch使用指南
2015/04/21 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
JavaScript中绑定事件的三种方式及去除绑定
2016/11/05 Javascript
实例浅析js的this
2016/12/11 Javascript
使用vue-resource进行数据交互的实例
2017/09/02 Javascript
jquery 键盘事件的使用方法详解
2017/09/13 jQuery
vue判断input输入内容全是空格的方法
2018/03/02 Javascript
微信小程序通过js实现瀑布流布局详解
2019/08/28 Javascript
windows如何把已安装的nodejs高版本降级为低版本(图文教程)
2020/12/14 NodeJs
[10:07]2014DOTA2国际邀请赛 实拍选手现场观战DK对阵Titan
2014/07/12 DOTA
Python cookbook(字符串与文本)针对任意多的分隔符拆分字符串操作示例
2018/04/19 Python
用python 实现在不确定行数情况下多行输入方法
2019/01/28 Python
Python实现弹球小游戏
2020/08/01 Python
python 爬虫网页登陆的简单实现
2020/11/30 Python
用canvas实现图片滤镜效果附演示
2013/11/05 HTML / CSS
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
幼儿园元旦活动感言
2014/03/02 职场文书
请假条标准格式规范
2014/04/10 职场文书
争先创优心得体会
2014/09/12 职场文书
2014年机关工会工作总结
2014/12/19 职场文书
匿名信格式范文
2015/05/27 职场文书
党风廉洁教育心得体会
2016/01/20 职场文书
详解Flask开发技巧之异常处理
2021/06/15 Python
python opencv检测直线 cv2.HoughLinesP的实现
2021/06/18 Python
Python 中 Shutil 模块详情
2021/11/11 Python
Oracle查看表空间使用率以及爆满解决方案详解
2022/07/23 Oracle