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


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 相关文章推荐
jquery JSON的解析方式
Jul 25 Javascript
3个可以改善用户体验的AngularJS指令介绍
Jun 18 Javascript
在for循环中length值是否需要缓存
Jul 27 Javascript
全面解析Bootstrap布局组件应用
Feb 22 Javascript
jQuery纵向导航菜单效果实现方法
Dec 19 Javascript
js获取隐藏元素的宽高
Feb 24 Javascript
基于Vue 2.0的模块化前端 UI 组件库小结
Dec 21 Javascript
JS返回页面时自动回滚到历史浏览位置
Sep 26 Javascript
基于原生js实现判断元素是否有指定class名
Jul 11 Javascript
javascript操作向表格中动态加载数据
Aug 27 Javascript
微信小程序实现拼图小游戏
Oct 22 Javascript
Vue3中的Refs和Ref详情
Nov 11 Vue.js
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的socket编程详解
2016/11/20 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
Laravel框架控制器,视图及模型操作图文详解
2019/12/04 PHP
张孝祥JavaScript学习阶段性总结(2)--(X)HTML学习
2007/02/03 Javascript
javascript下判断一个元素是否存在的代码
2010/03/05 Javascript
根据json字符串生成Html的一种方式
2013/01/09 Javascript
js实现基于正则表达式的轻量提示插件
2015/08/29 Javascript
自己动手写的jquery分页控件(非常简单实用)
2015/10/28 Javascript
AngularJS 文件上传控件 ng-file-upload详解
2017/01/13 Javascript
jQuery获取所有父级元素及同级元素及子元素的方法(推荐)
2018/01/21 jQuery
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
微信小程序之裁剪图片成圆形的实现代码
2018/10/11 Javascript
Vuejs监听vuex中值的变化的方法示例
2018/12/02 Javascript
nodejs中方法和模块用法示例
2018/12/24 NodeJs
ES6的异步终极解决方案分享
2019/07/11 Javascript
[01:06]DOTA2亚洲邀请赛专属珍藏-荧煌之礼
2017/03/24 DOTA
Python的Django框架中模板碎片缓存简介
2015/07/24 Python
python 随机数使用方法,推导以及字符串,双色球小程序实例
2017/09/12 Python
使用Windows批处理和WMI设置Python的环境变量方法
2019/08/14 Python
python全局变量引用与修改过程解析
2020/01/07 Python
关于python 跨域处理方式详解
2020/03/28 Python
pandas中read_csv、rolling、expanding用法详解
2020/04/21 Python
Python基于network模块制作电影人物关系图
2020/06/19 Python
Pytorch1.5.1版本安装的方法步骤
2020/12/31 Python
施华洛世奇新加坡官网:SWAROVSKI新加坡
2020/10/06 全球购物
运动会通讯稿50字
2014/01/30 职场文书
打架检讨书300字
2014/02/02 职场文书
教师个人剖析材料
2014/02/05 职场文书
《寓言两则》教学反思
2014/02/27 职场文书
语文教育专业求职信
2014/06/28 职场文书
2014年前台个人工作总结
2014/11/14 职场文书
2014会计年终工作总结
2014/12/20 职场文书
酒店采购员岗位职责
2015/04/03 职场文书
狂人日记读书笔记
2015/06/30 职场文书
党员理论学习心得体会
2016/01/21 职场文书
SQLServer之常用函数总结详解
2021/08/30 SQL Server