<template>
<img :data-src="item.image" alt />
</template>
<script>
updated() {
this.$nextTick(() => {
let $imgList = document.querySelectorAll("img");
let length = $imgList.length;
for (var i = 0; i < length; i++) {
let current = $imgList[i];
if (!$imgList.src) {
let dataSrc = current.dataset.src.split("?")[0];
let width = current.width;
let dpr = window.devicePixelRatio;
let _width = Math.ceil(width * dpr);
current.src =
dataSrc + `?x-oss-process=image/resize,w_${_width}`;
}
}
});
}
</script>
问题描述
所以希望找出一个能在不同屏幕显示不同大小图片的方法
本文实例都用vue来描述
优化方案
方案一:
通过函数来计算每个img的宽度
此种方式需要事先知道所有img的宽度
方案二:
将初始链接置于data-src里,在页面渲染完成后获取所有img标签,随后获取img的宽度,根据dpr计算得到最终的图片宽度,并将它置于src里
遇到的问题:
无法得知页面何时渲染完成,img标签也可能使用v-if来修饰,一开始是不存在的
如果在有属性变化时去遍历这个操作,当img的src为空时进行计算并赋值,可能会有性能问题(不确定)
具体方式如下:
此种方式只需要我们为图片设置data-src,不需要知道img具体的大小,但可能会有性能隐患