无需图片预加载时,为啥不需要把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
你好
图片是否需要预加载在于服务端是否返回了图片的高度。因为对于瀑布流而言,图片的高度是非常重要的。
如果服务端没有返回图片高度,则需要通过预加载来确定图片高度。
如果服务端返回了图片高度,则不需要通过预加载来确定图片高度。
以上就是图片预加载的概念,你是不是把这个概念想复杂了?
022022-12-30
相似问题