微信小程序 boundingClientRect 获取元素节点位置信息不准确

微信小程序 获取页面元素视图位置的 高度不准确,官方没有明确的给解决方式。

wx.createSelectorQuery().select('#the-id').boundingClientRect(function(rect){
      rect.id      // 节点的ID
      rect.dataset // 节点的dataset
      rect.left    // 节点的左边界坐标
      rect.right   // 节点的右边界坐标
      rect.top     // 节点的上边界坐标
      rect.bottom  // 节点的下边界坐标
      rect.width   // 节点的宽度
      rect.height  // 节点的高度
    }).exec()

原因:是因为页面没有完全渲染完成就获取了高度

小程序提供了 onReady页面渲染完成时,但是部分机型无效,会有BUG

最终解决代码如下图所示:

onReady() {
    let that = this;
    //获取元素节点的位置信息
    const query = wx.createSelectorQuery().in(this)
    //小程序BUG不加延时算出来的高度部分机型不准确,目前官方没有给更好的解决方案
    setTimeout(() => { 
      query.select('.indexBar-box').boundingClientRect(res=>{
        that.setData({
          boxTop: res.top
        })
      }).exec();

      query.select('.indexes').boundingClientRect(res=>{
        that.setData({
          barTop: res.top
        })
      }).exec();
    }, 0);
}

 

微信小程序中的 JavaScript 并不支持像传统浏览器环境中的 `document` 对象来直接操作 DOM,因为微信小程序的页面是由 WXML(类似 HTML 的标记语言)和 WXSS(类似 CSS 的样式表)构成的,并且运行在微信的内嵌浏览器环境中,它没有完整的 DOM API。 在微信小程序中,如果你需要获取元素节点信息,你通常会使用微信提供的 `wx.createSelectorQuery()` API 来进行节点查询。这个方法返回一个 `SelectorQuery` 对象实例,你可以用来查询节点信息获取节点的宽、左边距等信息,以及节点在页面中的相对位置。 以下是一个简单的示例代码,展示如何在微信小程序获取节点信息: ```javascript // 获取应用实例 const app = getApp() Page({ data: { nodeInfo: {} }, onLoad: function() { // 创建选择器查询 const query = wx.createSelectorQuery() // 选择器使用选择器字符串定位节点,例如选择ID为node的节点 query.select('#node') .boundingClientRect() // 节点布局位置的计算 .exec((res) => { // res 是一个包含所选节点信息的数组 const nodeInfo = res[0] if (nodeInfo) { // 这里可以获取节点的布局信息,如nodeInfo.left, nodeInfo.top等 this.setData({ nodeInfo: nodeInfo }) } }) } }) ``` 在上面的代码中,我们在页面加载时使用了 `wx.createSelectorQuery()` 来查询一个具有特定 ID 的节点,并通过 `boundingClientRect()` 方法获取节点的布局信息。然后通过回调函数中的 `res` 参数获取节点的相关信息,并将其存储在页面数据中。 需要注意的是,微信小程序节点信息的查询是异步执行的,需要通过回调函数来获取查询结果。
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值