jjhjiyu
jjhjiyu
  • 发布:2021-04-15 22:18
  • 更新:2021-04-22 21:20
  • 阅读:705

nvue中widthFix的图片高度什么时候计算最合适?

分类:uni-app

一张mode为widthFix的图片,需要计算渲染后的高度
经测试,当图片触发@load并不表示图片已被渲染,不知道是bug还是我监听图片load方法是错误的?

const query = uni.createSelectorQuery().in(this);  
query  
.select('#image')  
.boundingClientRect((data) => {  
_this.imageHeight = data.height+'px';  
console.log(_this.imageHeight) 这里取到的图片高度大概率是0,说明图片还未被渲染,有时候能取到高度  
})  
.exec();
2021-04-15 22:18 负责人:无 分享
已邀请:
DCloud_iOS_XHY

DCloud_iOS_XHY

你好,vue 还是 nuev 页面,请提供一个完整的示例工程方便快速定位问题

  • jjhjiyu (作者)

    nvue页面出现这个问题,vue页面我没测,demo已提供,请查收

    2021-04-16 14:40

  • jjhjiyu (作者)

    还有有时候图片会消失,直接加载不出来,反复运行工程,一定要杀死app再重进才能复现

    2021-04-16 14:52

jjhjiyu

jjhjiyu (作者)

demo在这

DCloud_iOS_XHY

DCloud_iOS_XHY

直接在回调中打印图片高度没有问题,所以排查你下面的代码逻辑看看哪有问题吧

calHeight(event) {  
    console.log(event.detail.height);  
}
  • jjhjiyu (作者)

    @load读取到的图片高度也不对,是原图高度,要的是图片渲染之后的高度,我这个demo打印出来的高度有时候是0不是吗?你没测到0的情况?

    2021-04-16 16:14

  • jjhjiyu (作者)

    第一种情况{"height":183.39999389648438,"right":393,"bottom":340.2361145019531,"width":393,"left":0,"top":156.8361053466797,"id":"image","dataset":{}}


    第二种情况


    {"height":0,"right":393,"bottom":156.8361053466797,"width":393,"left":0,"top":156.8361053466797,"id":"image","dataset":{}}


    同一张图片打印出来的,不是逻辑问题吧,@load确实在图片渲染之前就触发了

    2021-04-16 16:20

  • jjhjiyu (作者)

    代码就是demo里的代码,如果是代码有问题,请指正下是哪里有问题呢,我监听load的方式不对?

    2021-04-16 16:22

  • jjhjiyu (作者)

    我需要取到图片的真实高度,然后赋值给swiper,否则图片过高的时候swiper不会被撑开

    如果你没测到0的情况,把app杀死在打开,我测试机是红米note7,iOS是iphoneX都有这种情况出现,我有打印在控制台,取到的确实是0

    2021-04-16 16:27

  • DCloud_iOS_XHY

    回复 jjhjiyu: 了解你的需求了,看一下下面的回复

    2021-04-16 17:08

DCloud_iOS_XHY

DCloud_iOS_XHY

nvue 页面图片下载完后就会触发 load 事件,同时触发重新排版,两个都是异步的,在load事件中获取 image组件的高度会存在获取不到的情况,可以在 load 中拿到图片的原始宽高算出 image 组件布局后的真实高度,暂时可以这么处理一下,
另外 vue 页面不存在这个问题

  • jjhjiyu (作者)

    嗯嗯,请问widthFix是如何计算的呢,方便告知下公式吗,知道公式我才可以自己计算

    2021-04-16 17:26

  • jjhjiyu (作者)

    还在吗亲,咋算呀,这个组件布局后的真实高度,可以举个例子吗 假如宽750高300的图片,widthFix渲染后的真实高度应该咋计算呢

    2021-04-16 18:52

  • jjhjiyu (作者)

    请问原始宽高如何算出 image 组件布局后的真实高度,ios和安卓得出的高度不同,是不是和屏幕宽度有关系?

    2021-04-17 18:39

  • jjhjiyu (作者)

    都到最后一步了,告知下算法呀大哥!!!之前在别的帖子也是问到这步就没信息了!!好像都没人知道widthFix是怎么实现的计算高度

    2021-04-18 23:34

DCloud_iOS_XHY

DCloud_iOS_XHY

这个很简单呀
自适应高度 = 设置的组件宽度 x 图片原始高度 / 图片原始宽度;

var heigth = 750 * event.detail.height / event.detail.width + 'rpx';  
this.imageHeight = heigth;
  • jjhjiyu (作者)

    谢谢,我试试,我之前没设置宽度的,都是flex:1

    2021-04-22 21:52

该问题目前已经被锁定, 无法添加新回复