无需图片预加载时,为啥不需要把columnWidth置空?

来源:10-10 通用组件-瀑布流:无需图片预加载时,优化功能处理

zippen

2022-12-30

watch(
  () => props.column,
  () => {
    if (props.picturePreReading) {
      // 在 picturePreReading 为 true 的前提下,需要首先为列宽滞空,列宽滞空之后,会取消瀑布流渲染
      columnWidth.value = 0
      // 等待页面渲染之后,重新执行计算。否则在 item 没有指定过高度的前提下,计算出的 item 高度会不正确
      nextTick(reset)
    } else {
      reset()
    }
  }
)

图片预加载的时候,需要把列宽置空,重新计算列宽和图片高度;
但是不需要图片预加载的时候,也需要重新计算列宽和图片高度啊,因为图片的高度也是根据列宽等比例缩放的。
为啥不需要图片预加载的时候,就可以省略列宽置空呢?
老师您在视频里面说是因为item有了明确的高度可以这么做。
但是我个人认为item的高度也是需要根据列宽等比例缩放的啊?为啥您就说图片的高度是明确的呢?而且列宽需要在reset里面进行操作,也就是说在setTimeOut里面操作,假如不把columnWidth置空也会出现显示错误吧?按理论来说。
所以我就被搞糊涂了,于是把columnWidth.value = 0注释了,我发现在需要图片预加载的时候,图片展示的高度又出错了。但是columnWidth.value = 0这个东西不是只是把视图重置了吗?怎么功能这么大?我感觉老师你没有好好解释清楚这个代码的含义,只是很含糊的说只要把它置空是为了更好的渲染,但实际情况下是非他不可的;
而且不需要图片加载的时候你写了这么一段代码

<img
  class="w-full rounded bg-transparent"
  :src="data.photo"
  :style="{
    height: (width / data.photoWidth) * data.photoHeight + 'px'
  }"
/>

感觉如果再变回需要预加载的情况下,height不就变成0px了吗?不是应该先判断width是否存在再赋值吗?比如width?这种三元表达式?

写回答

1回答

Sunday

2022-12-30

你好

图片是否需要预加载在于服务端是否返回了图片的高度。因为对于瀑布流而言,图片的高度是非常重要的。

如果服务端没有返回图片高度,则需要通过预加载来确定图片高度。

如果服务端返回了图片高度,则不需要通过预加载来确定图片高度。

以上就是图片预加载的概念,你是不是把这个概念想复杂了?

0
2
Sunday
回复
zippen
已QQ沟通
2022-12-30
共2条回复

基于 Vue3 ,打造前台+中台通用开发提效解决方案

42 种前台常见业务模型, 15 种中台通用组件,成为前端提效高手

788 学习 · 517 问题

查看课程