阅读提示:本文共计约6254个文字,预计阅读时间需要大约17分钟,由作者免费编程软件下载编辑整理创作于2023年11月06日01时04分01秒。

Vue.js 中使用 column-count 属性实现瀑布流布局时,可能会遇到图片加载的问题。这里我们将探讨一种解决方法,以确保所有图片都能正确加载并显示。

我们需要确保图片的加载顺序与它们在页面上的显示顺序一致。为此,我们可以使用 <picture> 元素和 <source> 标签,根据设备的屏幕宽度选择最合适的图片资源。同时,为了避免浏览器提前渲染未加载的图片,我们还需要为图片添加 loading="lazy" 属性。

接下来,我们需要确保图片的加载不会阻塞页面的其他部分。为了实现这一点,我们可以使用 Intersection Observer API 来监听图片是否进入视窗范围。当图片进入视窗范围时,开始加载图片;否则,延迟加载。

以下是一个简单的示例,展示了如何在 Vue.js 中实现上述方法:

vue 里用 column-count 实现的瀑布流 图片加载问题?
<template>
  <div class="carousel">
    <picture v-for="(item, index) in items" :key="index">
      <source :srcset="getSrcSet(item)" media="(min-width: 800px)" />
      <source :srcset="getSrcSet(item)" media="(min-width: 500px)" />
      <img :src="getSrc(item)" alt="" loading="lazy" />
    </picture>
  </div>
</template>

<script>
export default {
  data() {
    return {
      items: [
        { small: 'small1.jpg', medium: 'medium1.jpg', large: 'large1.jpg' },
        { small: 'small2.jpg', medium: 'medium2.jpg', large: 'large2.jpg' },
        { small: 'small3.jpg', medium: 'medium3.jpg', large: 'large3.jpg' },
      ],
    };
  },
  methods: {
    getSrcSet(item) {
      if (window.innerWidth >= 800) {
        return item.large;
      } else if (window.innerWidth >= 500) {
        return item.medium;
      } else {
        return item.small;
      }
    },
  },
  created() {
    const images = document.querySelectorAll('.carousel img');
    const observer = new IntersectionObserver((entries, observer) => {
      entries.forEach((entry) => {
        if (entry.isIntersecting) {
          images[entry.target.dataset.index].src = entry.target.src;
          observer.unobserve(entry.target);
        }
      });
    });

    images.forEach((image, index) => {
      observer.observe(image);
      image.dataset.index = index;
    });
  },
};
</script>

通过以上代码,我们可以确保图片的加载顺序与它们在页面上的显示顺序一致,并且只有在需要时才进行加载,从而避免瀑布流布局中的图片加载问题

点赞(79) 打赏

微信小程序

微信扫一扫体验

立即
投稿

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部