8***@qq.com
8***@qq.com
  • 发布:2019-09-20 14:54
  • 更新:2023-06-02 09:44
  • 阅读:5065

uni.createSelectorQuery()获取节点高度不准确

分类:uni-app
let query = uni.createSelectorQuery().select('#swiper-pic');  
        query.boundingClientRect(function(data) {  
                console.log("节点高为"+" : "+data.height);  
                _this.swiperHeight = data.height;  
            })  
            .exec();  

求解 为什么uni.createSelectorQuery()获取高的值不是节点行内样式的414px,而是image组件的初始值240px

2019-09-20 14:54 负责人:无 分享
已邀请:
1***@qq.com

1***@qq.com

如果要获取的内容区域的高度不固定,当数据发生更新的时候,内容区域的高度发生了变化,这时候获取到的值就会不准确,只有获取到手动设置了height值的。真是坑人啊

c***@gmail.com

c***@gmail.com

兄弟,你这个是怎么解决的啊?

自古名将

自古名将 - 底层码农

遇到了一样的问题

jiang2266028

jiang2266028

我也是,根本就不准确

599

599

我也是!settimeout可以解决,但是总有失败的时候

余温半暖

余温半暖

this.$nextTick(() => {  
   获取动态高度  
})

我写的APP端有误差,web端刚好,不知啥原因

6***@qq.com

6***@qq.com

我也是,根本就不准确

5***@qq.com

5***@qq.com

运行开发者工具数据是对的,到真机小程序上数值偏大一点

itmonkey

itmonkey - 程序汪

如果在页面中使用,需要在页面实例化后
如果在组件中使用,需要在组件实例化之后,并且api后面加in(this)

  • 5***@qq.com

    组件内使用的,也加了in(this),也加了this.$nextTick,真机上数组还是偏大了点

    2022-03-16 15:53

  • itmonkey

    回复 5***@qq.com: 不太清楚你获取的谁的高度,如果是图片的,需要在图片@load事件中调用,并且图片的加载事件中,本来就会返回图片高度等信息

    2022-03-16 15:57

  • 5***@qq.com

    回复 itmonkey: 我是用uni.createSelectorQuery().in(this)获取的图片的高度

    2022-03-16 16:19

  • itmonkey

    回复 5***@qq.com: 图片在uniapp中其实也是一个组件,它有load事件可以监听,不用获取节点信息,图片加载要晚于节点绘制,看功能需求吧,如果是图片高度,用图片的laod事件

    2022-03-16 16:42

  • 5***@qq.com

    回复 itmonkey:图片的load事件为啥我拿到的值是一千多呢,实际上没有那么大啊

    2022-03-16 16:45

  • itmonkey

    回复 5***@qq.com: 上数据,可能图片本来就这么高,是你图片父级比较低

    2022-03-16 17:01

  • 5***@qq.com

    回复 itmonkey: 所以图片的load事件不符合我的需求

    2022-03-17 10:36

  • itmonkey

    回复 5***@qq.com: 我意思是在图片load之后,再走你先前的获取节点信息的方法

    2022-03-17 10:53

  • 5***@qq.com

    回复 itmonkey: 就是你说的这样啊

    2022-03-17 13:55

2***@qq.com

2***@qq.com

请问解决了嘛

1***@qq.com

1***@qq.com

这是因为uni.createSelectorQuery().in(this).select('#the').boundingClientRect()是异步获取元素节点高度,当请求的数据过多或者过长时无法获取准确的高度,用nextTick无法获取最新高度,个人怀疑是微任务执行太快了,放到宏任务可以获取到最新高度,目前我找到解决的方式就是加延时器的方法解决,期待大神们有更好的解决方法

A***@163.com

A***@163.com

动态数据时,在组件上使用v-if判断即可

要回复问题请先登录注册