延迟加载图像 (svelte/sapper)

Lazy load images in (svelte/sapper)

在 Sapper 中执行这种延迟加载的最佳方法是什么:

  1. 导航到包含图像的页面
  2. 先从src下载小图
  3. 开始从 data-src 加载更大的版本并将其更改为 src 准备就绪后
  4. 导航到另一个页面
  5. 返回图片页面,已经加载了大图

如果有人能帮忙,我会很高兴:)

您正在寻找 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>