先看官方文档给出的说明

查询节点信息的对象,返回一个SelectorQuery对象实例\color{#9a2323}{查询节点信息的对象,返回一个 SelectorQuery 对象实例}查询节点信息的对象,返回一个SelectorQuery对象实例

拿到实例后再看上边挂载的方法

  • SelectorQuery.in (设置选取范围)
  • SelectorQuery.select (选择节点 | 页面中匹配到的第一个)
  • SelectorQuery.selectAll (选择当前页面下匹配选择器的所有节点)
  • SelectorQuery.selectViewport (获取显示区域的尺寸、滚动位置等信息)
  • SelectorQuery.exec (执行所有的请求,请求结果按请求次序构成数组)

多看文档在微信这里好像不太行的样子
所以还是直接建个demo吧,以一个盒子滑动到顶部吸顶为需求。
实现步骤为通过 wx.createSelectorQuery 获取元素在页面中的高度,页面滑动的时候通过微信提供的 onPageScroll 方法,获取当前页面的滚动高度。到达阈值后 setData

index.wxml
<view id="fixed-content" class="fixed-box {{ isFixed ? 'stick' : '' }}"><text>{{ isFixed ? '吸顶啦' : '元素滑动至tab栏时吸顶' }}</text>
</view>
index.js
page({onLoad () {this.queryFixedElementInfo();},// 查询吸顶元素高度queryFixedElementInfo () {// 获取一个 'SelectorQuery' 实例const query = wx.createSelectorQuery();// 选择 id 为 'fixed-content' 的页面元素,查询其布局位置query.select('#fixed-content').boundingClientRect();// empty-element 选择的是一个页面并不存在的节点,同样发起一个查询,写在这里只是想提醒下看代码片段的各位,对于不能确定的数据,在取值的时候尽量给个默认值,或者判断数据类型后再进行对应的操作,以免操作不当报错,影响后续的逻辑// 实际应用场景可能为,使用 wx:if 控制的元素,在查询时未渲染query.select('#empty-element').boundingClientRect();// 官方注解: '执行所有的请求 ***请求结果按请求次序构成数组*** 在callback的第一个参数中返回。'query.exec(res => {const [ fixedElement, emptyElement ] = res;// 第一项为查询页面节点 '#fixed-content' 的返回值,const { bottom, dataset, height, left, right, top, width } = fixedElement || {};// 查询对象中元素自身的宽高console.log(`%c 查询元素的宽高:${width} * ${height}`, 'color: #282C34');/*** top 为距顶部距离, bottom为元素底部距顶部的距离* 这块可以自己调整元素在界面中的位置* bottom - top === height;* console.log(bottom - top === height); // true*/console.log(`%c 查询元素相对视图的边界坐标\n上:${top}\n下:${bottom}\n左:${left}\n右:${right}`, 'color: #a52222');// 查询元素中携带的自定义属性console.dir(dataset);// 因为第二条并不存在于页面中,所以也没有返回值,从里边取值的时候记得给个默认值const { id } = emptyElement || {};console.log(`%c 以解构方式取到的值为:${id}, 但是不会报错,需要的话可以在解构的时候赋个默认值`, 'color: red');/** 以下写法会报错,影响后续的业务逻辑  */// console.log(res[1].id || emptyElement.id);// do sth...// 记录 '#fixed-content' 距离顶部的距离this.setData({ fixedTop: top });});},// 页面滑动事件onPageScroll (e) {const { scrollTop } = e;const { fixedTop, isFixed } = this.data;if (scrollTop >= fixedTop && !isFixed) {this.setData({ isFixed: true });return;}if (scrollTop < fixedTop && isFixed) {this.setData({ isFixed: false });return;}},
}

.select & .selectAll

传入一个选择器,选择器格式参考文档
selector类似于 CSS 的选择器,但仅支持下列语法。
· ID选择器:#the-id
· class选择器(可以连续指定多个):.a-class.another-class
· 子元素选择器:.the-parent > .the-child
· 后代选择器:.the-ancestor .the-descendant
· 跨自定义组件的后代选择器:.the-ancestor >>> .the-descendant
· 多选择器的并集:#a-node, .some-other-nodes

.selectViewport

返回一个获取wxml节点信息的对象,包含的方法官方文档有列出
微信官方文档 | NodesRef

.exec

可以看到使用 exec 时如文档所说将所有的请求执行,然后返回结果是一个数组,顺序为发起请求的顺序。
有些条件下可能会出现查询元素并不在界面上的情况,所以对应的返回值为 null,如果这时直接以对象的方式去取值,则会报错,影响后续代码的执行。所以在使用时请记得考虑为空的情况

————————手动的分割线—————————————————————————

Last

其实开始是想把 wx.createSelectorQuerywx.createIntersectionObserver 放在一起,弄个代码片段贴上来就好,不做细分了,但是想了下对初接触的可能不太友好,所以在blog里拆开。这里再挂上揉在一起的小程序代码片段吧,可以对比或者调试,这样可能更方便去理解这个东西

微信开发者工具 | 代码片段地址

微信小程序(四) 节点查询 | wx.createSelectorQuery相关推荐

  1. 微信小程序云开发查询数据库结果为空

    微信小程序云开发查询数据库结果为空 问题描述: 先上代码: getNotice : function(){var that = thisconst db = wx.cloud.database()db ...

  2. 微信小程序实战—快递查询

    微信小程序实战-快递查询案例 需求:输入快递单号,点击查询按钮即可查看快递信息 api:阿里云全国快递物流查询 关键代码: 数据定义(index.js) data: {motto: 'Hello Wo ...

  3. 微信小程序 四种弹窗方式

    微信小程序弹窗 一.wx.showToast(Object object) 二 .wx.showModal(Object object) 三.wx.showLoading(Object object) ...

  4. 微信小程序实现条件查询示例

    微信小程序实现条件查询示例 index.js //index.js //获取应用实例 const app = getApp() const db = wx.cloud.database(); cons ...

  5. 微信小程序四种父子相互传值方式

    微信小程序四种父子相互传值方式 1. 绑定自定义属性(父传子),触发自定义方法 (子传父) 原生微信小程序+uni-app都可以实现 父组件: <template><view cla ...

  6. 微信小程序-API-数据缓存-wx.setStorageSync

    微信小程序-API-数据缓存-wx.setStorageSync-2020-2-18 存 wx.setStorageSync('openid', openid); //将openid存入本地缓存 取 ...

  7. 微信小程序设置请求超时wx.request等,简单易懂!

    微信小程序设置请求超时wx.request等 一.用到的方法: 个人理解,比较粗糙 看不懂可以百度一下具体用法 new Promise:new了一个函数或者方法,可以被Promise.race等方法调 ...

  8. 微信小程序使用物流查询插件

    微信小程序使用物流查询插件 文章目录 微信小程序使用物流查询插件 添加插件 添加成功 使用方式 声明使用插件 引入插件包 效果图 物流查询插件 添加插件 登录微信公众平台后台->设置->第 ...

  9. 微信小程序登录流程+介绍wx.login和auth.code2Session

    微信小程序登录流程+介绍wx.login和auth.code2Session 几个核心API和核心字段 wx.login() 调用接口获取登录凭证(code) code2Session 登录凭证校验, ...

最新文章

  1. vb中的webrowser无法进行滑块验证_专题63 验证动量守恒定律
  2. RabbitMQ之队列优先级
  3. JavaFX UI控件教程(十九)之Hyperlink
  4. MFC中实现的画箭头算法 (Arrow in MFC)
  5. python发邮件实例_python 发送邮件实例
  6. django 项目中使用项目环境制作脚本 通过终端命令运行脚本文件(management/commands)...
  7. 2020年“华为杯”中国研究生数学建模竞赛题目及简单分析
  8. 崮德好文连载 - 活该你是工程师(自序)
  9. 服务器c盘满了怎么清理? 服务器c盘空间不足清理方法
  10. 基于飞桨 DeepLabV3+实现人体肾组织图像中肾小球识别
  11. 闽南师范大学基础计算机教学部,闽南师范大学计算机基础教学部.doc
  12. AlphaControls 控件 编辑皮肤 变更Glyphs控制符号
  13. 解决Vue.directives is not a function报错
  14. RISC V (RV32+RV64) 架构 整体介绍
  15. AI 新技术革命将如何重塑就业和全球化格局?深度解读 UN 报告(上篇)
  16. MCMC原理解析(马尔科夫链蒙特卡洛方法)
  17. 八、Docker Swarm
  18. MFC中添加GIF图片
  19. 越狱Season 1-Episode 7: Riots, Drills and the Devil: Part 2
  20. 欧拉角细节/旋转顺序/内旋外旋

热门文章

  1. 喝java茶,我为你泡一杯花茶
  2. Chrome 图片批量下载扩展—— zzllrr Imager(小乐图客)
  3. 阿里云大数据工程师ACP认证例题
  4. 目前最受欢迎的12个Python开源框架,你用过几个?
  5. 基于stm32人体健康监测系统
  6. [leetcode]Majority Element II
  7. DNA甲基化测序方法介绍
  8. 适用于 GNU/Linux 的字型
  9. 美术资源检测 — 让你的网格无可挑剔
  10. u盘一插上计算机就不响应,u盘插上没反应解决方法