当前位置:首页 > VUE

vue图片实现懒加载

2026-02-21 20:19:58VUE

vue图片实现懒加载的方法

使用Intersection Observer API

Intersection Observer API可以检测元素是否进入视口,适合实现懒加载。创建一个自定义指令或组件来监听图片是否进入可视区域。

// 自定义指令
Vue.directive('lazy', {
  inserted: (el, binding) => {
    const observer = new IntersectionObserver((entries) => {
      entries.forEach(entry => {
        if (entry.isIntersecting) {
          el.src = binding.value
          observer.unobserve(el)
        }
      })
    })
    observer.observe(el)
  }
})

在模板中使用:

<img v-lazy="imageUrl" alt="lazy image">

使用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" alt="lazy image">

使用loading和error占位图

为提升用户体验,可以设置加载中和加载失败的占位图。

Vue.use(VueLazyload, {
  loading: require('@/assets/loading.gif'),
  error: require('@/assets/error.png')
})

监听滚动事件实现懒加载

对于不支持Intersection Observer的旧浏览器,可以通过监听滚动事件实现。

methods: {
  handleScroll() {
    const images = document.querySelectorAll('[data-src]')
    images.forEach(img => {
      if (img.getBoundingClientRect().top < window.innerHeight) {
        img.src = img.dataset.src
        img.removeAttribute('data-src')
      }
    })
  }
},
mounted() {
  window.addEventListener('scroll', this.handleScroll)
  this.handleScroll()
},
beforeDestroy() {
  window.removeEventListener('scroll', this.handleScroll)
}

模板中使用data-src属性:

vue图片实现懒加载

<img data-src="imageUrl" alt="lazy image">

注意事项

  • 对于大量图片,使用Intersection Observer性能更好
  • 移动端需要考虑网络环境,可以预加载更多图片
  • 服务器端渲染(SSR)时需要注意懒加载的兼容性
  • 可以结合webp等现代图片格式进一步优化性能

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

相关文章

vue实现图片循环

vue实现图片循环

实现图片循环展示 在Vue中实现图片循环展示可以通过v-for指令结合数组数据完成。以下是具体实现方式: 基础循环展示 准备图片数据数组,使用v-for渲染图片列表: <template&g…

vue 实现图片单选

vue 实现图片单选

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

vue实现触底加载

vue实现触底加载

触底加载的实现方法 在Vue中实现触底加载功能,可以通过监听滚动事件或使用Intersection Observer API来实现。以下是两种常见的方法: 监听滚动事件 在组件中监听滚动事件,计算…

js实现图片拖拽

js实现图片拖拽

实现图片拖拽的基本步骤 HTML 结构需要包含可拖拽的图片元素,并设置 draggable 属性为 true: <img id="dragImage" src="image.jpg" drag…

vue实现滑动图片

vue实现滑动图片

实现滑动图片的基本思路 在Vue中实现滑动图片效果,通常可以通过以下几种方式完成。滑动图片的核心在于处理用户触摸或鼠标事件,计算位移,并动态调整图片位置。 使用CSS过渡和Vue数据绑定 通过Vue…

vue实现打印图片

vue实现打印图片

实现图片打印的基本思路 在Vue中实现图片打印功能,通常需要借助浏览器原生的打印API以及CSS控制打印样式。核心步骤包括创建一个隐藏的打印容器,将图片放入其中,然后触发浏览器的打印对话框。 创建打…