延迟加载图像(苗条/工兵)

bbb*_*zon 4 svelte

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

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

如果有人可以提供帮助,我会很高兴:)

Ric*_*ris 8

您正在寻找操作。这些函数在将元素添加到 DOM 时运行,并使用destroyand(可选)update方法返回一个对象。

你可以做这样的事情(这里是交互式演示):

<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>
Run Code Online (Sandbox Code Playgroud)

  • 您可以使用完全相同的技术 https://svelte.dev/repl/26ba12b3fbd146eaaefc8b024a826da7?version=3.5.1 (4认同)