uni-app image 组件 mode 设置为 widthFix 时,无法获取实际的节点高度
uni-app image 组件 mode 设置为 widthFix 时,无法获取实际的节点高度
操作步骤:
- 使用图片组件,mode 设置为 widthFix;
- 在任意位置获取该节点信息,高度返回一直是 240,与实际高度不符合。
预期结果:
- 使用图片组件,mode 设置为 widthFix;
- 获取该节点信息,返回的高度信息因该与实际高度一致。
实际结果:
获取该节点信息,返回的高度一直为 240,与实际高度不符合。
bug描述:
- 使用图片组件,mode 设置为 widthFix;
- 在任意位置获取该节点信息,高度返回一直是 240,与实际高度不符合。
<template>
<image
:src="require('./demo.jpg')"
mode="widthFix"
class="image"
lazy-load
></image>
</template>
<script>
export default {
mounted() {
uni
.createSelectorQuery()
.select(".image")
.boundingClientRect((data) => {
console.log(data);
})
.exec();
},
};
</script>
信息项 | 内容 |
---|---|
产品分类 | uniapp/H5 |
PC开发环境操作系统 | Windows |
PC开发环境操作系统版本号 | 10 |
浏览器平台 | Chrome |
浏览器版本 | 88.0.4324.182 |
项目创建方式 | CLI |
CLI版本号 | 4.5.7 |
更多关于uni-app image 组件 mode 设置为 widthFix 时,无法获取实际的节点高度的实战教程也可以访问 https://www.itying.com/category-93-b0.html
时机,注意时机
更多关于uni-app image 组件 mode 设置为 widthFix 时,无法获取实际的节点高度的实战教程也可以访问 https://www.itying.com/category-93-b0.html
目前我们这边测试,mode 设置为其他的都可以获取到正确的节点信息。唯独 widthFix 不管什么样的图片,放到哪里执行,一直都是返回 height:240;能否说明一下您说的时机,是指哪里呢?
我反馈的这个问题, 在2020 年4月份,已经有开发者反馈了,但是并没有得到反馈。 附上那位开发者反馈的帖子:https://ask.dcloud.net.cn/question/92677
回复 SuperPony: 实际指的是加载时机,你在图像加载以前获取高度,获取的是错误的高度
试试在 image 组件的 load 事件后
感谢回复
这个load事件取到的高度也不对呀,是原图的宽高,想获取这个最后的高度214px怎么获取呢,我现在有个情况是要给swiper动态赋值高度,所有图片都是widthFix,怎么确认所有图片都加载完了呢?
回复 jjhjiyu: 试了试,可以了
回复 深海智行: 什么可以了,怎么确认widthFix图片全都加载完了,而且load事件取到的是原图宽高,如果要取图片真实高度,还得再取一次节点信息查一次
回复 jjhjiyu: 对的
我遇到的问题是 使用动画, 在动画缩放的时候 图片就加载出来了,但是动画完成之后 图片的尺寸是失真的,因为动画开始的第一贞 图片就已经设置好了高度, 但是 动画完成后并没有更新图片高度,
这是一个已知的异步渲染问题。当 mode
设置为 widthFix
时,图片需要先加载完成才能计算出正确的高度,而 mounted
钩子中获取节点信息时图片可能尚未加载完成。
解决方案是在图片加载完成后获取节点信息:
<template>
<image
:src="require('./demo.jpg')"
mode="widthFix"
class="image"
lazy-load
@load="onImageLoad"
></image>
</template>
<script>
export default {
methods: {
onImageLoad() {
uni
.createSelectorQuery()
.select(".image")
.boundingClientRect((data) => {
console.log(data); // 此时会返回正确的高度
})
.exec();
}
}
};
</script>