当前位置:首页 > 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设计的懒加载插件,使用简单。

安装插件:

npm install vue-lazyload

在main.js中配置:

import VueLazyload from 'vue-lazyload'

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

组件中使用:

<img v-lazy="imageUrl">

自定义滚动事件监听

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

vue实现图片滚动加载

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)需要特殊处理
  • 图片加载状态可添加过渡效果提升用户体验
  • 确保图片有明确的尺寸避免重绘

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

相关文章

加载jquery

加载jquery

加载 jQuery 的方法 通过 CDN 加载 推荐使用官方或公共 CDN(内容分发网络)加载 jQuery,速度快且稳定。将以下代码添加到 HTML 文件的 <head> 或 <b…

vue实现图片预览

vue实现图片预览

实现图片预览功能 在Vue中实现图片预览功能可以通过多种方式完成,常见的有使用原生HTML5的<dialog>元素、第三方库如viewer.js或vue-photo-preview,以及自…

vue实现图片单选

vue实现图片单选

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

vue实现图片编辑

vue实现图片编辑

Vue实现图片编辑的方法 使用第三方库vue-cropper 安装vue-cropper库: npm install vue-cropperjs 在Vue组件中使用: <template&g…

vue实现无缝图片

vue实现无缝图片

实现无缝图片轮播的方法 在Vue中实现无缝图片轮播,可以通过以下步骤完成。这种方法利用Vue的响应式特性和CSS动画,确保图片切换平滑且无缝。 使用vue-awesome-swiper库 安装vue…

vue实现添加图片

vue实现添加图片

使用 <input type="file"> 上传图片 通过 HTML 原生文件输入框获取用户选择的图片文件,结合 Vue 的 v-on 监听文件变化事件。 <template…