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


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 相关文章推荐
Firefox getBoxObjectFor getBoundingClientRect联系
Oct 26 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
Nov 25 Javascript
鼠标划过实现延迟加载并隐藏层的js代码
Oct 11 Javascript
js将字符串转成正则表达式的实现方法
Nov 13 Javascript
利用js判断浏览器类型(是否为IE,Firefox,Opera浏览器)
Nov 22 Javascript
JS自调用匿名函数具体实现
Feb 11 Javascript
jQuery中的AjaxSubmit使用讲解
Sep 25 Javascript
ionic进入多级目录后隐藏底部导航栏(tabs)的完美解决方案
Nov 23 Javascript
使用JavaScript实现表格编辑器(实例讲解)
Aug 02 Javascript
jQuery响应滚动条事件功能示例
Oct 14 jQuery
详解vue-cli 2.0配置文件(小结)
Jan 14 Javascript
JavaScript基于用户照片姓名生成海报
May 29 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
关于session在PHP5的配置文件中的详细设置参数说明
2011/04/20 PHP
php实现的CSS更新类实例
2014/09/22 PHP
js 无提示关闭浏览器页面的代码
2010/03/09 Javascript
js生成随机数之random函数随机示例
2013/12/20 Javascript
Nodejs使用mysql模块之获得更新和删除影响的行数的方法
2014/03/18 NodeJs
javascript实现十六进制颜色值(HEX)和RGB格式相互转换
2014/06/20 Javascript
简介可以自动完成UI的AngularJS工具angular-smarty
2015/06/23 Javascript
浅谈JavaScript的Polymer框架中的事件绑定
2015/07/29 Javascript
Bootstrap table分页问题汇总
2016/05/30 Javascript
AngularJS基础 ng-show 指令简单示例
2016/08/03 Javascript
angularjs实现上拉加载和下拉刷新数据功能
2017/06/12 Javascript
详解vue配置后台接口方式
2019/03/29 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
2019/07/13 Javascript
vue实现计算器功能
2020/02/22 Javascript
使用python实现strcmp函数功能示例
2014/03/25 Python
python各种语言间时间的转化实现代码
2016/03/23 Python
解决python3运行selenium下HTMLTestRunner报错的问题
2018/12/27 Python
在linux系统下安装python librtmp包的实现方法
2019/07/22 Python
python发qq消息轰炸虐狗好友思路详解(完整代码)
2020/02/15 Python
Python如何使用内置库matplotlib绘制折线图
2020/02/24 Python
Python偏函数Partial function使用方法实例详解
2020/06/17 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
使用 HTML5 Canvas 制作水波纹效果点击图片就会触发
2014/09/15 HTML / CSS
Net-A-Porter美国官网:全球时尚奢侈品名站
2017/02/11 全球购物
英语专业个人求职自荐信
2013/09/21 职场文书
村主任群众路线个人对照检查材料
2014/09/26 职场文书
2014年护士工作总结范文
2014/11/11 职场文书
2014年大学班级工作总结
2014/11/14 职场文书
初中生思想道德自我评价
2015/03/09 职场文书
年底个人总结范文
2015/03/10 职场文书
项目经理助理岗位职责
2015/04/13 职场文书
集结号观后感
2015/06/08 职场文书
秋季运动会加油词
2015/07/18 职场文书
导游词之寿县报恩寺
2020/01/19 职场文书
解决python绘图使用subplots出现标题重叠的问题
2021/04/30 Python
Python趣味挑战之用pygame实现简单的金币旋转效果
2021/05/31 Python