当前位置:首页 > VUE

vue实现懒加载图片

2026-02-23 15:45:30VUE

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设计的懒加载库,使用简单功能丰富。

vue实现懒加载图片

安装:

npm install vue-lazyload

使用:

import VueLazyload from 'vue-lazyload'
Vue.use(VueLazyload, {
  preLoad: 1.3,
  error: 'error.png',
  loading: 'loading.gif',
  attempt: 3
})

// 模板中使用
<img v-lazy="imageUrl" alt="lazy image">

原生实现方案

vue实现懒加载图片

对于需要兼容旧浏览器的项目,可以使用scroll事件监听实现。

Vue.directive('lazy', {
  inserted: (el, binding) => {
    function checkVisible() {
      const rect = el.getBoundingClientRect()
      return (
        rect.top <= window.innerHeight && 
        rect.bottom >= 0 &&
        rect.left <= window.innerWidth && 
        rect.right >= 0
      )
    }

    function loadImage() {
      if (checkVisible()) {
        el.src = binding.value
        window.removeEventListener('scroll', loadImage)
      }
    }

    window.addEventListener('scroll', loadImage)
    loadImage()
  }
})

注意事项

  • 为懒加载图片设置合适的高度和宽度,避免页面布局抖动
  • 使用占位图提升用户体验
  • 考虑添加加载失败时的备用方案
  • 移动端需要特别处理快速滑动场景
  • 大量图片时考虑使用虚拟滚动技术配合懒加载

性能优化建议

  • 对Intersection Observer设置适当的rootMargin
  • 滚动事件监听需要节流处理
  • 图片加载完成前显示低质量预览图(LQIP)
  • 考虑使用WebP等现代图片格式进一步优化

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

相关文章

vue加载动画实现

vue加载动画实现

Vue 加载动画的实现方法 在 Vue 中实现加载动画可以通过多种方式完成,以下是一些常见的方法: 使用 CSS 动画 通过 CSS 定义动画效果,结合 Vue 的动态类绑定或条件渲染控制动画的显示…

vue实现图片加载

vue实现图片加载

Vue 实现图片加载的方法 在 Vue 中实现图片加载可以通过多种方式,以下是一些常见的方法: 使用 v-bind 绑定图片路径 通过 v-bind 动态绑定图片路径,可以灵活地加载本地或远程图片。…

vue实现滑动加载

vue实现滑动加载

滑动加载的实现思路 滑动加载通常通过监听滚动事件,判断是否滚动到页面底部来触发数据加载。Vue中可以通过结合v-for、@scroll事件和计算属性实现。 基础实现方法 监听滚动事件 在包含滚动区域…

react如何延迟加载

react如何延迟加载

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

js实现图片的拖动

js实现图片的拖动

实现图片拖动的步骤 HTML 结构 在 HTML 中创建一个可拖动的图片元素,确保设置 draggable 属性为 true。 <img id="draggable-img" src="ima…

vue实现图片复制

vue实现图片复制

Vue 实现图片复制功能 在 Vue 中实现图片复制功能通常涉及两种方式:通过剪贴板 API 或借助第三方库。以下是具体实现方法: 使用 Clipboard API(现代浏览器支持) 通过 navi…