收藏
回答

wx.getMenuButtonBoundingClientRect()有缓存,导致计算错误

框架类型 问题类型 API/组件名称 终端类型 微信版本 基础库版本
小程序 Bug wx.getMenuButtonBoundingClientRect 微信iOS客户端 8.0.26 2.25.2
  1. 在半屏小程序下,通过wx.getMenuButtonBoundingClientRect()获取胶囊位置,是按照半屏小程序的标准,其值正常。
  2. 紧接着使用全屏小程序(保活期间),再次通过wx.getMenuButtonBoundingClientRect(),期望是依据全屏小程序的标准,但是返回的还是半屏小程序的数据。
  3. 同理,若先使用全屏小程序,紧接着使用半屏小程序,半屏小程序中得到的胶囊位置就是全屏小程序的数据。

分析:

  1. 通过「重新进入小程序」可以获取到正确的数据,因此怀疑是 该api缓存的数据,没有得到即使更新导致。
回答关注问题邀请回答
收藏

5 个回答

  • 社区技术运营专员-Jahozheng
    社区技术运营专员-Jahozheng
    2022-09-09

    目前可以通过在onShow()后延迟500ms重新获取getMenuButtonBoundingClientRect的值来规避,这边修复后会尽快上线

    2022-09-09
    有用
    回复 1
    • SnowAngel
      SnowAngel
      2023-09-27
      请问该问题已经修复了吗?目前线上还是遇到了相同问题
      2023-09-27
      回复
  • Demons
    Demons
    2022-07-29

    请具体描述问题出现的流程,并提供能复现问题的简单代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)。

    2022-07-29
    有用
    回复 1
  • 哄哄
    哄哄
    11-28

    无语了,都快2025年了,这个bug还没修复!害我浪费好多时间!可惜不能骂人!

    11-28
    有用
    回复
  • 豪Wei💡
    豪Wei💡
    2022-08-30

    已经遇到这个问题了。 确实有这个情况。 wx.getMenuButtonBoundingClientRect() 的缓存问题

    复现步骤:

    1. 先打开半屏小程序, 通过wx.getMenuButtonBoundingClientRect()获取的到的位置信息,再关闭半屏小程序
    2. 通过主入口再打开自己的小程序,会发现wx.getMenuButtonBoundingClientRect()获取到的位置信息跟半屏打开的位置信息一致; 而删除小程序后,再重新从主入口打开,再通过wx.getMenuButtonBoundingClientRect()可以获取到全屏正确数据;


    2022-08-30
    有用
    回复 2
  • 茜茜又困了🐽
    茜茜又困了🐽
    2022-07-29

    官方周末又要加班了...

    2022-07-29
    有用
    回复 1
    • 童小虎
      童小虎
      2022-07-29
      只怕石沉大海
      2022-07-29
      回复
登录 后发表内容