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


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 相关文章推荐
AJAX架构之Dojo篇
Apr 10 Javascript
使用javascript实现ListBox左右全选,单选,多选,全请
Nov 07 Javascript
Jquery 实现checkbox全选方法
Jan 28 Javascript
JavaScript中使用自然对数ln的方法
Jun 14 Javascript
prototype框架中美元符号$用法分析
Jan 22 Javascript
基于javascript实现最简单选项卡切换
Feb 01 Javascript
JS奇技之利用scroll来监听resize详解
Jun 15 Javascript
Vue.js 2.5新特性介绍(推荐)
Oct 24 Javascript
详解mpvue小程序中怎么引入iconfont字体图标
Oct 01 Javascript
微信小程序webview与h5通过postMessage实现实时通讯的实现
Aug 20 Javascript
9个JavaScript日常开发小技巧
Oct 06 Javascript
JavaScript读取本地文件常用方法流程解析
Oct 12 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实现的日历程序
2015/06/18 PHP
php数组实现根据某个键值将相同键值合并生成新二维数组的方法
2017/04/26 PHP
Laravel框架基于ajax实现二级联动功能示例
2019/01/17 PHP
JQuery 中几个类选择器的简单使用介绍
2013/03/14 Javascript
node.js中的Socket.IO使用实例
2014/11/04 Javascript
javascript的switch用法注意事项分析
2015/02/02 Javascript
JS中的Replace方法使用经验分享
2015/05/20 Javascript
JS实现slide文字框缩放伸展效果代码
2015/11/05 Javascript
js实现带三角符的手风琴效果
2017/03/01 Javascript
vue之数据交互实例代码
2017/06/16 Javascript
提高Node.js性能的应用技巧分享
2017/08/10 Javascript
webpack中CommonsChunkPlugin详细教程(小结)
2017/11/09 Javascript
js中bool值的转换及“&&”、“||”、 “!!”详解
2017/12/21 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
webpack 样式加载的实现原理
2018/06/12 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
关于Vue项目跨平台运行问题的解决方法
2018/09/18 Javascript
JS 正则表达式验证密码、邮箱格式的实例代码
2018/10/28 Javascript
React 组件渲染和更新的实现代码示例
2019/02/21 Javascript
详解从0开始搭建微信小程序(前后端)的全过程
2019/04/15 Javascript
[57:29]Alliance vs KG 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/17 DOTA
Python使用迭代器捕获Generator返回值的方法
2017/04/05 Python
详谈Python2.6和Python3.0中对除法操作的异同
2017/04/28 Python
pandas 将list切分后存入DataFrame中的实例
2018/07/03 Python
Win系统PyQt5安装和使用教程
2019/12/25 Python
pandas 对group进行聚合的例子
2019/12/27 Python
Pandas缺失值2种处理方式代码实例
2020/06/13 Python
python实现经纬度采样的示例代码
2020/12/10 Python
泰国最新活动和优惠:Megatix
2020/05/07 全球购物
写自荐信要注意什么
2013/12/26 职场文书
十八届三中全会宣传方案
2014/02/21 职场文书
小学一年级学生评语大全
2014/12/25 职场文书
家属慰问信
2015/02/14 职场文书
2015年小班保育员工作总结
2015/05/27 职场文书
python实现手机推送 代码也就10行左右
2022/04/12 Python
python微信智能AI机器人实现多种支付方式
2022/04/12 Python