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


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 相关文章推荐
js最简单的拖拽效果实现代码
Sep 24 Javascript
ModelDialog JavaScript模态对话框类代码
Apr 17 Javascript
javascript中的事件代理初探
Mar 08 Javascript
JS实现网页Div层Clone拖拽效果
Sep 26 Javascript
详解JavaScript基于面向对象之创建对象(1)
Dec 10 Javascript
浅析JavaScript动画模拟拖拽原理
Dec 09 Javascript
jQuery Validate验证表单时多个name相同的元素只验证第一个的解决方法
Dec 24 Javascript
Vue.js事件处理器与表单控件绑定详解
Mar 20 Javascript
node上的redis调用优化示例详解
Oct 30 Javascript
利用d3.js力导布局绘制资源拓扑图实例教程
Jan 08 Javascript
Vue 中如何正确引入第三方模块的方法步骤
May 05 Javascript
详解vue-template-admin三级路由无法缓存的解决方案
Mar 10 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
DOM XPATH获取img src值的query
2013/09/23 PHP
64位windows系统下安装Memcache缓存
2015/12/06 PHP
php array_values 返回数组的所有值详解及实例
2016/11/12 PHP
js 获取子节点函数 (兼容FF与IE)
2010/04/18 Javascript
JavaScript 图像动画的小demo
2012/05/23 Javascript
ie6下png图片背景不透明的解决办法使用js实现
2013/01/11 Javascript
javascript里模拟sleep(两种实现方式)
2013/01/25 Javascript
jquery移动listbox的值原理及代码
2013/05/03 Javascript
JavaScript生成GUID的多种算法小结
2013/08/18 Javascript
JQuery实现table行折叠效果以JSON做数据源
2014/05/26 Javascript
jQuery中复合属性选择器用法实例
2014/12/31 Javascript
JavaScript获取页面中表单(form)数量的方法
2015/04/03 Javascript
JavaScript实现的多个图片广告交替显示效果代码
2015/09/04 Javascript
JavaScript 是什么意思
2016/09/22 Javascript
微信小程序之仿微信漂流瓶实例
2016/12/09 Javascript
D3.js进阶系列之CSV表格文件的读取详解
2017/06/06 Javascript
浅析JS中常用类型转换及运算符表达式
2017/07/23 Javascript
vue 动态改变静态图片以及请求网络图片的实现方法
2018/02/07 Javascript
vue+webpack 打包文件 404 页面空白的解决方法
2018/02/28 Javascript
详解vue中在父组件点击按钮触发子组件的事件
2020/11/13 Javascript
js实现纯前端压缩图片
2020/11/16 Javascript
跟老齐学Python之从if开始语句的征程
2014/09/14 Python
Python系统监控模块psutil功能与经典用法分析
2018/05/24 Python
详解python分布式进程
2018/10/08 Python
解决python写入带有中文的字符到文件错误的问题
2019/01/31 Python
Python3 执行系统命令并获取实时回显功能
2019/07/09 Python
原来我一直安装 Python 库的姿势都不对呀
2019/11/11 Python
Python基于codecs模块实现文件读写案例解析
2020/05/11 Python
python自动从arxiv下载paper的示例代码
2020/12/05 Python
Python之qq自动发消息的示例代码
2021/02/18 Python
移动端html5判断是否滚动到底部并且下拉加载
2019/11/19 HTML / CSS
大学生学习2014年全国两会心得体会
2014/03/12 职场文书
活动总结报告怎么写
2014/07/03 职场文书
会计主管岗位职责
2015/04/02 职场文书
redis cluster支持pipeline的实现思路
2021/06/23 Redis
Unicode中的CJK(中日韩统一表意文字)字符小结
2021/12/06 HTML / CSS