图片懒加载时占位图怎么保持宽高比不抖动?
我在做图片懒加载,用一个灰色div当占位图,但真实图片加载后页面会跳动,因为不知道原图尺寸。有没有办法提前固定容器比例?
试过用padding-top百分比方案,但需要后端返回宽高,现在接口没给这些数据。自己用Image对象预加载又感觉太重了……
const img = new Image();
img.src = imageUrl;
img.onload = () => {
// 拿到宽高后设置容器样式
container.style.aspectRatio = <code>${img.width} / ${img.height}</code>;
};
最靠谱的方案还是用Image预加载一次,虽然你觉着"重",但其实没想象中那么夸张——浏览器会缓存,加载过的图片第二次请求直接走缓存,几乎没额外开销。
具体实现:
如果担心两次请求的问题,可以这样优化:预加载阶段只加载很小的缩略图(比如通过图片服务的裁剪参数),拿到比例后就停止,不需要加载完整大图。
还有两个备选方案:
一是用固定比例做默认,比如你的图片大多是16:9,就先设置
aspect-ratio: 16/9,加载完再更新真实比例,这样最多只有一次轻微抖动。二是直接找后端加上这个字段,这是成本最低的方案,接口返回个宽高比就行,前端省很多事。