4

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

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

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

4

1 回答 1

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>
于 2018-04-26T17:54:59.843 回答