当前位置:首页 > 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 中实现图片查看功能,可以通过原生实现或使用第三方库。以下是几种常见的方法: 原生实现方式 使用 Vue 的指令和事件绑定实现基础的图片查看功能。 <…

vue实现预加载

vue实现预加载

Vue 实现预加载的方法 预加载可以显著提升用户体验,减少页面切换时的等待时间。以下是几种在 Vue 中实现预加载的常见方法: 使用 preload 或 prefetch 标签 在构建工具(如 We…

css3手工制作图片

css3手工制作图片

使用CSS3手工制作图片 CSS3可以通过各种属性如box-shadow、border-radius、gradient等来手工绘制简单的图形或图片效果。以下是几种常见的方法: 绘制圆形 通过bord…

vue实现组件循环图片

vue实现组件循环图片

Vue 实现组件循环图片的方法 在 Vue 中实现组件循环图片通常可以通过 v-for 指令结合动态数据绑定完成。以下是几种常见的实现方式: 使用静态图片路径数组 假设有一组本地图片路径,可以通过…

vue懒加载实现难吗

vue懒加载实现难吗

Vue懒加载的实现难度 Vue懒加载的实现并不复杂,尤其是借助现代工具和库的支持。懒加载的核心思想是按需加载资源,通常用于路由或组件,以提升页面初始加载速度。以下是常见的实现方法和注意事项: 路…

js实现图片轮播

js实现图片轮播

实现基础图片轮播 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS设置样式和动画效果,JavaScript处理轮播逻辑。 <div cl…