当前位置:首页 > 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 实现图片取色功能 使用 Canvas API 提取颜色 在 Vue 项目中,可以通过 Canvas API 实现图片取色功能。创建一个组件,利用 ref 获取图片元素并绘制到 Canvas 上…

css动画制作图片

css动画制作图片

CSS动画制作图片的方法 使用CSS动画可以为图片添加各种动态效果,提升网页的视觉吸引力。以下是几种常见的CSS动画实现方式: 关键帧动画(@keyframes) 通过定义关键帧来控制动画的各个阶段…

vue实现图片闪烁

vue实现图片闪烁

实现图片闪烁效果的方法 在Vue中实现图片闪烁效果可以通过CSS动画或JavaScript动态控制样式。以下是几种常见方法: CSS动画实现 通过@keyframes定义闪烁动画,并应用到图片元素上…

Vue实现图片 放大

Vue实现图片 放大

Vue实现图片放大功能 使用v-viewer插件 安装v-viewer插件: npm install v-viewer 在main.js中引入并配置: import Viewer from 'v-…

js 实现图片轮播

js 实现图片轮播

基础实现方案 使用HTML、CSS和JavaScript创建一个简单的图片轮播。HTML部分定义轮播容器和图片,CSS负责样式布局,JavaScript处理轮播逻辑。 <div class="…

vue实现同步加载

vue实现同步加载

Vue 实现同步加载的方法 在 Vue 中,通常推荐使用异步加载(如 async/await 或 Promise)来优化性能,但在某些场景下可能需要同步加载。以下是几种实现同步加载的方法: 使用 c…