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


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 相关文章推荐
用倒置滤镜把div倒置,再把table倒置。
Jul 31 Javascript
js 对联广告、漂浮广告封装类(IE,FF,Opera,Safari,Chrome
Nov 26 Javascript
javascript 数字格式化输出的实现代码
Dec 10 Javascript
JS检测输入字符是否包含非法字符的示例代码
Feb 11 Javascript
JavaScript实现存储HTML字符串示例
Apr 21 Javascript
JavaScript中的getMilliseconds()方法使用详解
Jun 10 Javascript
Javascript农历与公历相互转换的简单实例
Oct 09 Javascript
自己封装的一个简单的倒计时功能实例
Nov 23 Javascript
基于Vue实例对象的数据选项
Aug 09 Javascript
jQuery实现鼠标移到某个对象时弹出显示层功能
Aug 23 jQuery
微信小程序实现侧边分类栏
Oct 21 Javascript
JavaScript实现点击出现子菜单效果
Feb 08 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英文字母大小写转换函数小结
2014/05/03 PHP
采用memcache在web集群中实现session的同步会话
2014/07/05 PHP
PHP整合七牛实现上传文件
2015/07/03 PHP
PHP实现QQ快速登录的方法
2016/09/28 PHP
Laravel5.7 数据库操作迁移的实现方法
2019/04/12 PHP
php使用json-schema模块实现json校验示例
2019/09/28 PHP
理解Javascript_07_理解instanceof实现原理
2010/10/15 Javascript
简单常用的幻灯片播放实现代码
2013/09/25 Javascript
Javascript的setTimeout()使用闭包特性时需要注意的问题
2014/09/23 Javascript
JavaScript节点及列表操作实例小结
2015/08/05 Javascript
js判断某个字符出现的次数的简单实例
2016/06/03 Javascript
js实现砖头在页面拖拉效果
2020/11/20 Javascript
jquery 一键复制到剪切板的实例
2017/09/20 jQuery
JS获取今天是本月第几周、本月共几周、本月有多少天、是今年的第几周、是今年的第几天的示例代码
2018/12/05 Javascript
javascript实现摄像头拍照预览
2019/09/30 Javascript
原生js实现表格翻页和跳转
2020/09/29 Javascript
在vue中使用eslint,配合vscode的操作
2020/11/09 Javascript
[01:39]2014DOTA2国际邀请赛 Newbee经理CU专访队伍火力全开
2014/07/15 DOTA
动态创建类实例代码
2009/10/07 Python
Python求两个文本文件以行为单位的交集、并集与差集的方法
2015/06/17 Python
python实现rsa加密实例详解
2017/07/19 Python
Flask框架Flask-Principal基本用法实例分析
2018/07/23 Python
python实现简单多人聊天室
2018/12/11 Python
pyqt5实现绘制ui,列表窗口,滚动窗口显示图片的方法
2019/06/20 Python
python 判断linux进程,并杀死进程的实现方法
2019/07/01 Python
python对象转字典的两种实现方式示例
2019/11/07 Python
numpy 声明空数组详解
2019/12/05 Python
python使用正则表达式去除中文文本多余空格,保留英文之间空格方法详解
2020/02/11 Python
Python使用多进程运行含有任意个参数的函数
2020/05/02 Python
如何用Matlab和Python读取Netcdf文件
2021/02/19 Python
英国最大的电脑零售连锁店集团:PC World
2016/10/10 全球购物
工会主席事迹材料
2014/06/03 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
山楂树之恋观后感
2015/06/11 职场文书
SONY AN-LP1 短波有源天线放大器
2021/04/22 无线电
pytorch 如何使用float64训练
2021/05/24 Python