boundingClientRect获取节点位置不正确怎么处理
dearweb 发布:2021-09-01 12:24:39阅读:如果你经常使用uniapp开发,那么你或许遇到过boundingClientRect API获取元素位置不准确的情况,本文主要就是解决boundingClientRect 获取元素位置不准确的问题。
首先看一下boundingClientRect返回值
好多小伙伴使用这个方法直接获取元素的位置,结果发现值不准确。
let that = this const query = uni.createSelectorQuery().in(that) query.select('.indexBar-box').boundingClientRect(rect=>{ rect.id // 节点的ID rect.dataset // 节点的dataset rect.left // 节点的左边界坐标 rect.right // 节点的右边界坐标 rect.top // 节点的上边界坐标 rect.bottom // 节点的下边界坐标 rect.width // 节点的宽度 rect.height // 节点的高度 }).exec();
返回值出现偏差的原因
因为这个api是异步返回值,所以在计算的时候,当前页面可能还没有完全渲染成功,有些元素的高度还没有被计算进去,导致整个结果出现了偏差,这个问题的解决方案有很多,小编给大家介绍一个整体比较简单的方法。
created() { let that = this; //获取元素节点的位置信息 const query = wx.createSelectorQuery().in(this) //在不加延时算出来的高度部分机型不准确,目前官方没有给更好的解决方案 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); }
整体来说,目前官方没有给出相对比较完善的解决方案,上面是小编自己根据实际经验得出的结论,确实可行。
小礼物走一波,支持作者
赏还没有人赞赏,支持一波吧