当前位置:首页 > VUE

vue图片实现懒加载

2026-01-21 04:50:09VUE

vue图片实现懒加载的方法

使用Intersection Observer API

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

// 创建观察器实例
const observer = new IntersectionObserver((entries) => {
  entries.forEach(entry => {
    if (entry.isIntersecting) {
      const img = entry.target
      img.src = img.dataset.src
      observer.unobserve(img)
    }
  })
})

// 在Vue组件中使用
mounted() {
  const images = document.querySelectorAll('[data-src]')
  images.forEach(img => observer.observe(img))
}

使用vue-lazyload插件

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

npm install vue-lazyload -S
// main.js中配置
import VueLazyload from 'vue-lazyload'
Vue.use(VueLazyload, {
  preLoad: 1.3,
  error: 'error.png',
  loading: 'loading.gif',
  attempt: 3
})

// 组件中使用
<img v-lazy="imageUrl">

自定义指令实现

可以创建自定义指令来实现懒加载功能。

// 注册全局指令
Vue.directive('lazy', {
  inserted: (el, binding) => {
    const observer = new IntersectionObserver(([entry]) => {
      if (entry.isIntersecting) {
        el.src = binding.value
        observer.unobserve(el)
      }
    })
    observer.observe(el)
  }
})

// 使用方式
<img v-lazy="imageUrl">

兼容性处理

对于不支持Intersection Observer的旧浏览器,可以添加polyfill或回退方案。

vue图片实现懒加载

// 引入polyfill
import 'intersection-observer'

// 或使用scroll事件作为fallback
function lazyLoadFallback() {
  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
    }
  })
}
window.addEventListener('scroll', lazyLoadFallback)

性能优化建议

  • 为懒加载图片设置占位图
  • 合理设置preLoad参数
  • 对滚动事件进行节流处理
  • 考虑使用低质量图片占位(LQIP)技术
  • 对于大量图片考虑虚拟滚动方案

以上方法可以根据项目需求选择使用,现代Vue项目推荐使用vue-lazyload插件,它提供了更多高级功能和更好的兼容性处理。

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

相关文章

vue实现预加载

vue实现预加载

vue实现预加载的方法 在Vue中实现预加载可以通过多种方式优化用户体验,以下是几种常见方法: 使用Webpack的魔法注释 通过import()语法结合Webpack的/* webpackPref…

js图片轮播的实现

js图片轮播的实现

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

vue实现添加图片

vue实现添加图片

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

vue实现图片滚动

vue实现图片滚动

实现图片滚动的 Vue 组件 使用 Vue 实现图片滚动效果可以通过自定义组件或第三方库完成。以下是两种常见方法: 方法一:使用 CSS 动画和 Vue 动态绑定 通过 Vue 的 v-for 和…

vue 实现图片单选

vue 实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能,可以通过结合 v-model 和自定义事件来实现。以下是具体实现方法: 方法一:使用 v-model 和计算属性 创建一个 Vue 组件…

react如何延迟加载

react如何延迟加载

延迟加载的实现方法 在React中实现延迟加载(Lazy Loading)通常指按需加载组件或资源,以提升初始页面加载性能。以下是几种常见方法: 使用React.lazy和Suspense Reac…