小程序
小游戏
企业微信
微信支付
扫描小程序码分享
p.select('#' + e.currentTarget.dataset.pid) 这一步是有数据返回的,但是下一步boundingClientRect回调就返回null了。
网上说搞个setTimeout,但是好像没有效果。
settimeout没有效果
8 个回答
加粗
标红
插入代码
插入链接
插入图片
上传视频
如果还是获取不到的话,建议wx.createSelectorQuery().in(this)看看?
wx.createSelectorQuery().in(this).select('#xxxx').boundingClientRect(rect => {
console.log(rect.height)
}).exec();
你好,麻烦通过点击下方“反馈信息”按钮,提供出现问题的。
pid ? Pid ?
js、wxml大小写问题?
==============问题所在===============
id的问题,id不要以数字开头
ps: setTimeout应该不再需要
若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人
将选择器的选取范围更改为自定义组件 component 内。(初始时,选择器仅选取页面范围的节点,不会选取任何自定义组件中的节点)
component
你获取的let p = wx.createSelectorQuery().select("#xxx"); console.log(p), 不出意外属性_component是null吧. 说明你现在的操作不在页面而在组件上.需要in(this)一下
我这里出现的问题是因为我在 create 钩子函数(不建议这样做)里面去 调用这个方法,但是这时候节点还没有渲染出来,获取的结果当然是null , settimeout 能够奏效就是节点渲染完才有节点信息返回。旧机型手机性能不太好,所以渲染节点就慢了很多。
如果你获取的元素节点上有wx:if或者节点的元素有wx:for。如果是wx:for元素是根据循环渲染的。使用节点获取信息需要在你获取数据接口之后完成渲染才不会返回空的。如果是wx:if的话。应该是同样的道理。你要先看你的元素是否比你调用的 const query = wx.createSelectorQuery().in(this) query.select('#the-id').boundingClientRect(function(res){ res.top // 这个组件内 #the-id 节点的上边界坐标 }).exec(); 先显示。如果先显示的话就不会为空。否则是为空的。 这是我的个人看法。不喜勿喷,谢谢。
小程序这边的问题也太多了吧,啥也获取不到
var image = this.createSelectorQuery().select(".image").boundingClientRect()
image.exec(function (res) {
// res[0].top // #the-id节点的上边界坐标
// res[1].scrollTop // 显示区域的竖直滚动位置
console.log("image",res)
})
我这里也是 有的是null
图片的load调用触发这个方法。
关注后,可在微信内接收相应的重要提醒。
请使用微信扫描二维码关注 “微信开放社区” 公众号
如果还是获取不到的话,建议wx.createSelectorQuery().in(this)看看?
wx.createSelectorQuery().in(this).select('#xxxx').boundingClientRect(rect => {
console.log(rect.height)
}).exec();
pid ? Pid ?
js、wxml大小写问题?
==============问题所在===============
id的问题,id不要以数字开头
ps: setTimeout应该不再需要
若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人
若认为该回答有用,给回答者点个[ 有用 ],让答案帮助更多的人
官方文档有给出说明:
SelectorQuery SelectorQuery.in(Component component)
将选择器的选取范围更改为自定义组件
component
内。(初始时,选择器仅选取页面范围的节点,不会选取任何自定义组件中的节点)你获取的let p = wx.createSelectorQuery().select("#xxx"); console.log(p), 不出意外属性_component是null吧. 说明你现在的操作不在页面而在组件上.需要in(this)一下
我这里出现的问题是因为我在 create 钩子函数(不建议这样做)里面去 调用这个方法,但是这时候节点还没有渲染出来,获取的结果当然是null , settimeout 能够奏效就是节点渲染完才有节点信息返回。旧机型手机性能不太好,所以渲染节点就慢了很多。
如果你获取的元素节点上有wx:if或者节点的元素有wx:for。如果是wx:for元素是根据循环渲染的。使用节点获取信息需要在你获取数据接口之后完成渲染才不会返回空的。如果是wx:if的话。应该是同样的道理。你要先看你的元素是否比你调用的 const query = wx.createSelectorQuery().in(this) query.select('#the-id').boundingClientRect(function(res){ res.top // 这个组件内 #the-id 节点的上边界坐标 }).exec(); 先显示。如果先显示的话就不会为空。否则是为空的。 这是我的个人看法。不喜勿喷,谢谢。
小程序这边的问题也太多了吧,啥也获取不到
var image = this.createSelectorQuery().select(".image").boundingClientRect()
image.exec(function (res) {
// res[0].top // #the-id节点的上边界坐标
// res[1].scrollTop // 显示区域的竖直滚动位置
console.log("image",res)
})
我这里也是 有的是null
图片的load调用触发这个方法。