当前位置:首页 > VUE

vue实现图片滚动加载

2026-01-23 13:34:28VUE

实现图片滚动加载的方法

在Vue中实现图片滚动加载(懒加载)可以通过以下方法完成:

使用Intersection Observer API

Intersection Observer API是现代浏览器提供的原生API,用于检测元素是否进入视口。

// 在Vue组件中
export default {
  data() {
    return {
      images: [
        { src: 'placeholder.jpg', loaded: false }
      ]
    }
  },
  mounted() {
    const observer = new IntersectionObserver((entries) => {
      entries.forEach(entry => {
        if (entry.isIntersecting) {
          const img = entry.target
          const src = img.dataset.src
          img.src = src
          observer.unobserve(img)
        }
      })
    }, {
      threshold: 0.1
    })

    document.querySelectorAll('[data-src]').forEach(img => {
      observer.observe(img)
    })
  }
}
<!-- 模板部分 -->
<img v-for="image in images" 
     :key="image.src" 
     :data-src="image.src" 
     :src="image.loaded ? image.src : 'placeholder.jpg'">

使用vue-lazyload插件

vue-lazyload是专门为Vue设计的懒加载插件,使用简单。

vue实现图片滚动加载

安装插件:

npm install vue-lazyload

在main.js中配置:

vue实现图片滚动加载

import VueLazyload from 'vue-lazyload'

Vue.use(VueLazyload, {
  preLoad: 1.3,
  error: 'error.png',
  loading: 'loading.gif',
  attempt: 1
})

组件中使用:

<img v-lazy="imageUrl">

自定义滚动事件监听

对于需要兼容旧浏览器的场景,可以使用传统的滚动事件监听。

export default {
  methods: {
    checkInView() {
      const images = document.querySelectorAll('[data-src]')
      images.forEach(img => {
        const rect = img.getBoundingClientRect()
        if (rect.top < window.innerHeight && rect.bottom > 0) {
          img.src = img.dataset.src
        }
      })
    }
  },
  mounted() {
    window.addEventListener('scroll', this.checkInView)
    this.checkInView()
  },
  beforeDestroy() {
    window.removeEventListener('scroll', this.checkInView)
  }
}

性能优化建议

  • 使用占位图避免布局抖动
  • 设置适当的threshold值(Intersection Observer)
  • 对于大量图片考虑虚拟滚动
  • 移除已加载图片的监听器减少开销
  • 添加加载失败的回退处理

注意事项

  • 移动端需要考虑视口缩放问题
  • 服务端渲染(SSR)需要特殊处理
  • 图片加载状态可添加过渡效果提升用户体验
  • 确保图片有明确的尺寸避免重绘

标签: 加载图片
分享给朋友:

相关文章

vue实现图片轮播

vue实现图片轮播

Vue 实现图片轮播的方法 使用第三方库(推荐) 安装 vue-awesome-swiper 库,这是基于 Swiper 的 Vue 封装: npm install swiper vue-aweso…

jquery 图片

jquery 图片

jQuery 图片操作 jQuery 提供了多种方法来操作图片,包括加载、显示、隐藏、调整尺寸等。以下是一些常见的图片操作方法: 动态加载图片 使用 attr() 方法可以动态修改图片的 src 属…

vue实现图片单选

vue实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能可以通过多种方式完成,以下是两种常见的实现方法: 方法一:使用 v-model 和单选按钮 通过将单选按钮与图片绑定,利用 v-model 管…

jquery加载页面

jquery加载页面

jQuery 加载页面内容的方法 使用 .load() 方法 通过 AJAX 请求加载远程数据并插入到指定元素中。适用于加载部分页面片段。 $("#targetElement").load("ext…

vue实现图片裁切

vue实现图片裁切

Vue 实现图片裁切的方法 使用 vue-cropperjs 库 vue-cropperjs 是一个基于 Cropper.js 的 Vue 封装库,专门用于图片裁切功能。 安装依赖: np…

vue实现图片活动

vue实现图片活动

Vue 实现图片轮播 使用 Vue 实现图片轮播可以通过多种方式完成,以下是几种常见的方法: 使用第三方库(如 Swiper) Swiper 是一个流行的轮播图库,支持 Vue 集成。安装 Swip…