当前位置:首页 > 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等现代图片格式进一步优化

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

相关文章

加载jquery

加载jquery

加载 jQuery 的方法 通过 CDN 加载 推荐使用官方或公共 CDN(内容分发网络)加载 jQuery,速度快且稳定。将以下代码添加到 HTML 文件的 <head> 或 <b…

react如何加载网页

react如何加载网页

使用 React 加载网页的方法 通过 iframe 嵌入网页 在 React 组件中,可以通过 iframe 标签直接加载外部网页。这种方式简单直接,适合嵌入第三方页面或静态内容。 import…

js实现图片的拖动

js实现图片的拖动

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

jquery图片放大

jquery图片放大

jQuery图片放大实现方法 使用jQuery实现图片放大功能可以通过多种方式完成,以下是几种常见且实用的方法: 使用jQuery Zoom插件 jQuery Zoom插件是一个轻量级的库,专门用于…

vue实现生成图片

vue实现生成图片

Vue 实现生成图片的方法 使用 html2canvas 库 html2canvas 是一个流行的库,可以将 DOM 元素转换为 Canvas,进而生成图片。适用于 Vue 项目。 安装 html2…

vue实现无线加载

vue实现无线加载

无限滚动加载的实现 在Vue中实现无限滚动加载(Infinite Scroll)可以通过监听滚动事件或使用现成的库完成。以下是两种常见方法: 使用原生滚动事件监听 通过监听滚动事件判断是否到…