收藏
回答

通过wx.createSelectorQuery().select(xx)获取高有时为null?

function getEleHeight(demo{
  return new Promise((resolve, reject) => {
    wx.createSelectorQuery().select(demo).boundingClientRect((rect) => {
      if(rect){
        resolve(rect)
      }else {
        Promise.reject('获取不到id rect的值为'+rect)
      }
    }).exec()
  })
}

有时候调用这个代码为null 因为页面渲染的时候 获取不到这个id 有什么好的解决办法 现在做首页 有个监听导航 有时候滑动太快 这个获取离顶部距离有偏差 
我加了延迟600毫秒但还是获取为null 有时候滑太快 导航里顶部距离为0 
回答关注问题邀请回答
收藏

2 个回答

  • 卢霄霄
    卢霄霄
    04-24

    调用这个方法的地方 截个图呢

    04-24
    有用 1
    回复 12
    • 卢霄霄
      卢霄霄
      04-24回复Dr.♀水
      看起来你是在做页面初始化的时候调用的,可以试试改到 onReady里去调用
      04-24
      回复
    • Dr.♀水
      Dr.♀水
      04-24
      04-24
      回复
    • Dr.♀水
      Dr.♀水
      04-24回复卢霄霄
      没用 有时候也会这样  我尝试过了
      04-24
      回复
    • 卢霄霄
      卢霄霄
      04-24回复Dr.♀水
      原理上是要保证元素被渲染出来了,你才能查到它的信息。如果有的是 setData之后才出来的,那要在setData的回调里查
      04-24
      回复
    • Dr.♀水
      Dr.♀水
      04-24回复Dr.♀水
      正如上面说的 如果没看缓存的话 请求很慢 就出现问题 最好的办法 等所有请求完毕 在调用这个api
      04-24
      回复
    查看更多(7)
  • Admin²⁰²⁰
    Admin²⁰²⁰
    04-24

    这个要渲染完成后调用才能正常获取。

    我看你的描述大概知道你的需求。性能更高的替代方案可以用:createIntersectionObserver

    相关文档:

    IntersectionObserver | 微信开放文档

    https://developers.weixin.qq.com/miniprogram/dev/api/wxml/wx.createIntersectionObserver.html

    04-24
    有用 1
    回复 8
    • Dr.♀水
      Dr.♀水
      04-24
      我去了解 今天就要解决这个问题
      04-24
      回复
    • Dr.♀水
      Dr.♀水
      04-24
      多个请求的情况 我怎么等所有请求完毕 在去调用这个api
      04-24
      回复
    • Admin²⁰²⁰
      Admin²⁰²⁰
      04-24回复Dr.♀水
      这个需要自己逻辑处理了。方案很多
      1、比如设置个标志,setData他有个success回调,在所有相关数据setData success后再设置这个标志,然后调用
      2、用定时器每隔500ms读取一次,数据为null就一直重试
      3、用Promise.all来处理异步。
      04-24
      回复
    • Dr.♀水
      Dr.♀水
      04-24
      我去试试看 不懂求请教哈
      04-24
      回复
    • Dr.♀水
      Dr.♀水
      04-24
      谢谢 解决了 这个Promise.all挺不错的
      04-24
      回复
    查看更多(3)
登录 后发表内容
问题标签