微信小程序实现动态获取元素宽高的方法分析


Posted in Javascript onDecember 10, 2018

本文实例讲述了微信小程序实现动态获取元素宽高的方法。分享给大家供大家参考,具体如下:

我以前一直以为微信小程序不能动态获取view元素的宽高。但是自从看到: wx.createSelectorQuery() 这个api接口,以前的某些问题就能得到解决了。。。

那么,这个api接口怎么用呢?

首先,这个接口会返回一个对象实例。

var obj=wx.createSelectorQuery();

下面的就是返回的对象实例 obj 的所有内容。

微信小程序实现动态获取元素宽高的方法分析

返回的 obj 有五个方法:

1.  obj.in(component):没用过这个方法,多用于组件的选择器。

2.  obj.select(selector):获取指定的节点,selector是css选择器。返回一个 NodesRef 对象实例,可以用于获取节点信息。

3.  obj.selectAll(selector):获取指定的节点,selector是css选择器。返回一个 NodesRef 对象实例,可以用于获取节点信息。

上面这两个我感觉就是 js 中querySelector和querySelectorAll的区别。

4. obj.selectViewport():我没用过这个方法。官方说是选择显示区域,可用于获取显示区域的尺寸、滚动位置等信息。也是返回一个 NodesRef 对象实例,可以用于获取节点信息。

5. exec( function(res){} ):执行所有的请求,请求结果按请求次序构成数组,在callback的第一个参数中返回

上面返回的 NodesRef 对象实例就很重要了,它有三个方法:

1. boundingClientRect( function(rect){} ):就是这个方法,能够动态获取view元素的高度、宽度等属性。还有其它的请看官方文档

2. scrollOffset( function(res) {}):获取节点的水平、垂直滚动的位置等。节点必须是scroll-view或者viewport

3. fields(fields,function(){res} ):这个可以获取指定元素的自定义属性和class名,具体的请看官方文档的说明。

废话了这么多,真正的实例用法:

wx.createSelectorQuery().selectAll('.npl-intro').boundingClientRect(function (rect) {
  console.log(rect[0].height)
  console.log(rect[0].width)
}).exec()

如果觉得这样写有点长。可以分步写。也是一样的结果。

var obj=wx.createSelectorQuery();
obj.selectAll('.npl-intro').boundingClientRect(function (rect) {
  console.log(rect[0].height)
  console.log(rect[0].width)
})
obj.exec() ;

或者在exec中返回,如果出现上面的方式出现获取到的 rect 是 null 的话,可以考虑用下面这种,就不会出现问题。结果是一样的。

var obj=wx.createSelectorQuery();
obj.selectAll('.npl-intro').boundingClientRect();
obj.exec(function (rect) {
  console.log(rect[0].height)
  console.log(rect[0].width)
}) ;

当然,这方法可以写在onLoadonReadyonShow等这些生命周期的方法,也可以写在自定义的方法里。什么时候需要,什么时候就调用。

注意:如果要获取通过wx:ifsetData来实现显示与隐藏的元素,调用的这个方法的时候可能出现获取到的内容为null。我的解决办法是加个定时器:因为这个获取元素的方法是异步的,所以只有拖延点时间再去获取,不然有可能元素还未加载出来,就调用了这个方法,当然返回的结果就是null了。

//动态设置高度
setTimeout(function () {
  var query = wx.createSelectorQuery();
  query.select('.nd-btnBox').boundingClientRect();
  query.exec(function (rect) {
    if (rect[0] === null) return;
    that.setData({
      marginBM: rect[0].height + 10
    })
  });
}, 500)

官方 wx.createSelectorQuery() 接口

希望本文所述对大家微信小程序开发有所帮助。

Javascript 相关文章推荐
键盘控制事件应用教程大全
Nov 24 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
Oct 11 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
Jul 08 Javascript
textarea不能通过maxlength属性来限制字数的解决方法
Sep 01 Javascript
js事件绑定快捷键以ctrl+k为例
Sep 30 Javascript
jQuery Masonry瀑布流插件使用详解
Nov 17 Javascript
JS实现为表格动态添加标题的方法
Mar 31 Javascript
JavaScript中Cookies的相关使用教程
Jun 04 Javascript
简单实现兼容各大浏览器的js复制内容到剪切板
Sep 09 Javascript
jQuery中JSONP的两种实现方式详解
Sep 26 Javascript
微信小程序制作表格的方法
Feb 14 Javascript
vue将后台数据时间戳转换成日期格式
Jul 31 Javascript
PM2自动部署代码步骤流程总结
Dec 10 #Javascript
vue路由前进后退动画效果的实现代码
Dec 10 #Javascript
Vue.js子组件向父组件通信的方法实例代码详解
Dec 10 #Javascript
vue 基于element-ui 分页组件封装的实例代码
Dec 10 #Javascript
JavaScript对象拷贝与赋值操作实例分析
Dec 10 #Javascript
express 项目分层实践详解
Dec 10 #Javascript
JS选取DOM元素常见操作方法实例分析
Dec 10 #Javascript
You might like
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
PHPExcel实现表格导出功能示例【带有多个工作sheet】
2018/06/13 PHP
Laravel中的chunk组块结果集处理与注意问题
2018/08/15 PHP
PHP接口类(interface)的定义、特点和应用示例
2020/05/18 PHP
不错的asp中显示新闻的功能
2006/10/13 Javascript
Prototype使用指南之array.js
2007/01/10 Javascript
Opacity.js
2007/01/22 Javascript
[原创]保存的js无法执行的解决办法
2007/02/25 Javascript
JQuery 1.4 中的Ajax问题
2010/01/23 Javascript
JavaScript实现在数组中查找不同顺序排列的字符串
2014/09/26 Javascript
js获取当前时间显示在页面上并每秒刷新
2014/12/24 Javascript
javascript的tab切换原理与效果实现方法
2015/01/10 Javascript
js检测用户输入密码强度
2015/10/22 Javascript
第一次接触神奇的Bootstrap
2016/10/14 Javascript
js模仿微信朋友圈计算时间显示几天/几小时/几分钟/几秒之前
2017/04/27 Javascript
微信小程序 navbar实例详解
2017/05/11 Javascript
Vue2.0 实现移动端图片上传功能
2018/05/30 Javascript
浅谈js中的bind
2019/03/18 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
vue 实现一个简单的全局调用弹窗案例
2020/09/10 Javascript
vue 自定指令生成uuid滚动监听达到tab表格吸顶效果的代码
2020/09/16 Javascript
Python struct模块解析
2014/06/12 Python
Python文件循环写入行时防止覆盖的解决方法
2018/11/09 Python
详解如何在Apache中运行Python WSGI应用
2019/01/02 Python
PIL图像处理模块paste方法简单使用详解
2019/07/17 Python
如何在python中实现随机选择
2019/11/02 Python
广州迈达威.net面试题目
2012/03/10 面试题
汽车专业毕业生推荐信
2013/11/12 职场文书
班风口号
2014/06/18 职场文书
幼师求职信
2014/06/23 职场文书
开展党的群众路线教育实践活动领导班子对照检查材料
2014/09/25 职场文书
党员干部三严三实心得体会
2014/10/13 职场文书
毕业证明模板
2015/06/19 职场文书
创业计划书之酒厂
2019/10/14 职场文书
Java实战之用Swing实现通讯录管理系统
2021/06/13 Java/Android
集英社今正式宣布 成立游戏公司“集英社Games”
2022/03/31 其他游戏