众所周知微信小程序中没用dome元素,想要获取某个元素的宽高,只有创建节点
直接上代码:
js页面
//创建节点选择器
var query = wx.createSelectorQuery(); // 创建节点查询器 query
//选择id
var that = this; // 获取this
// 这段代码的意思是选择class=every的节点,获取节点位置信息的查询请求
query.select('.every').boundingClientRect(function (rect) {
console.log(res.width)
that.setData({
height: res.width + 'px' // 赋值操作
})
}).exec();
query.selectViewport().scrollOffset().exec()//这段代码的意思是获取页面滑动位置的查询请求
wxml页面
<view class='every' style='height:{{height}}'></view>
如果获取的信息是null;
初步分析问题是:
1. onload 对应的是加载中,也就是webkit加载页面的方法执行。
2. onShow 对应的页面显示,并不算是数据填充后的显示,而是“页面框架的加载”
3. onReady 指的是“页面框架的显示”,而并非页面数据与节点加载渲染完成。
4. 微信小程序之所以这么设计应该是照顾到webkit内核压力的缘故,
使得页面整个加载分为多个步骤,异步进行。
所有得到结论:
1. 证明他们的执行顺序是:
onLoad >> onShow >> onReady
2. 查询方法: wx.createSelectorQuery(),在页面响应事件中并不能查询到节点信息。
3. 如有查询节点需求可以用延时方法或者操作事件来获取。
例如:setTimeout();或者是 wx.nextTick() // 这个和setTimeout()类似