延迟加载图像 (svelte/sapper)
Lazy load images in (svelte/sapper)
在 Sapper 中执行这种延迟加载的最佳方法是什么:
- 导航到包含图像的页面
- 先从src下载小图
- 开始从 data-src 加载更大的版本并将其更改为 src
准备就绪后
- 导航到另一个页面
- 返回图片页面,已经加载了大图
如果有人能帮忙,我会很高兴:)
您正在寻找 actions。这些是 运行 当一个元素被添加到 DOM 和 return 一个具有 destroy
和(可选)update
方法的对象时的函数。
你可以这样做 (interactive demo here):
<img
alt="random photo"
src="https://picsum.photos/100/50"
use:lazy="{src: 'https://picsum.photos/400/200'}"
>
<style>
img {
width: 400px;
height: 200px;
}
</style>
<script>
const loaded = new Map();
export default {
actions: {
lazy(node, data) {
if (loaded.has(data.src)) {
node.setAttribute('src', data.src);
} else {
// simulate slow loading network
setTimeout(() => {
const img = new Image();
img.src = data.src;
img.onload = () => {
loaded.set(data.src, img);
node.setAttribute('src', data.src);
};
}, 2000);
}
return {
destroy(){} // noop
};
}
}
};
</script>
在 Sapper 中执行这种延迟加载的最佳方法是什么:
- 导航到包含图像的页面
- 先从src下载小图
- 开始从 data-src 加载更大的版本并将其更改为 src 准备就绪后
- 导航到另一个页面
- 返回图片页面,已经加载了大图
如果有人能帮忙,我会很高兴:)
您正在寻找 actions。这些是 运行 当一个元素被添加到 DOM 和 return 一个具有 destroy
和(可选)update
方法的对象时的函数。
你可以这样做 (interactive demo here):
<img
alt="random photo"
src="https://picsum.photos/100/50"
use:lazy="{src: 'https://picsum.photos/400/200'}"
>
<style>
img {
width: 400px;
height: 200px;
}
</style>
<script>
const loaded = new Map();
export default {
actions: {
lazy(node, data) {
if (loaded.has(data.src)) {
node.setAttribute('src', data.src);
} else {
// simulate slow loading network
setTimeout(() => {
const img = new Image();
img.src = data.src;
img.onload = () => {
loaded.set(data.src, img);
node.setAttribute('src', data.src);
};
}, 2000);
}
return {
destroy(){} // noop
};
}
}
};
</script>