当前位置:首页 > VUE

vue 实现图片懒加载

2026-01-23 14:08:22VUE

Vue 图片懒加载实现方法

使用 Intersection Observer API

Intersection Observer API 是浏览器原生支持的懒加载方案,性能高效且无需额外依赖。

// 指令定义
const lazyLoad = {
  mounted(el, binding) {
    const observer = new IntersectionObserver((entries) => {
      entries.forEach(entry => {
        if (entry.isIntersecting) {
          el.src = binding.value
          observer.unobserve(el)
        }
      })
    })
    observer.observe(el)
  }
}

// 全局注册
app.directive('lazy', lazyLoad)

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

使用第三方库 vue-lazyload

对于需要更复杂功能或兼容旧浏览器的场景,可以使用成熟的第三方库。

vue 实现图片懒加载

安装依赖:

vue 实现图片懒加载

npm install vue-lazyload

配置使用:

import VueLazyload from 'vue-lazyload'

const app = createApp(App)
app.use(VueLazyload, {
  preLoad: 1.3,
  error: 'error.png',
  loading: 'loading.gif',
  attempt: 3
})

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

自定义滚动事件监听

对于需要兼容老版本浏览器的场景,可以通过监听滚动事件实现。

const lazyLoad = {
  mounted(el, binding) {
    function loadImage() {
      const rect = el.getBoundingClientRect()
      if (rect.top < window.innerHeight + 100) {
        el.src = binding.value
        window.removeEventListener('scroll', loadImage)
      }
    }
    window.addEventListener('scroll', loadImage)
    loadImage() // 初始检查
  }
}

注意事项

  • 图片元素应设置初始占位图或背景色避免布局抖动
  • 考虑设置合适的 rootMargin 提前加载可视区域附近的图片
  • 移动端需要特别处理 touch 事件确保流畅体验
  • 对于 SSR 应用需要区分客户端和服务端环境

以上方法可根据项目需求选择,现代项目推荐优先使用 Intersection Observer API 方案。

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

相关文章

css网页制作漂浮图片

css网页制作漂浮图片

使用CSS实现漂浮图片效果 通过CSS的animation属性和@keyframes规则可以轻松实现图片漂浮效果。以下是几种常见实现方式: 基础漂浮动画 通过关键帧定义图片的垂直移动,模拟漂浮感:…

vue实现组件循环图片

vue实现组件循环图片

Vue 实现组件循环图片的方法 在 Vue 中实现组件循环图片通常可以通过 v-for 指令结合动态数据绑定完成。以下是几种常见的实现方式: 使用静态图片路径数组 假设有一组本地图片路径,可以通过数…

vue 实现异步加载

vue 实现异步加载

Vue 异步加载的实现方法 动态导入组件(懒加载) 使用 import() 语法动态导入组件,Vue 会将其转换为异步加载的组件。适用于路由或组件按需加载。 const AsyncComponent…

vue实现图片单选

vue实现图片单选

Vue 实现图片单选功能 在 Vue 中实现图片单选功能可以通过多种方式完成,以下是两种常见的实现方法: 方法一:使用 v-model 和单选按钮 通过将单选按钮与图片绑定,利用 v-model 管…

react如何添加图片

react如何添加图片

在React中添加图片的方法 使用import导入本地图片 将图片文件放在项目目录中(如src/assets),通过import语句引入后作为src属性值: import logo from './…

vue实现放大图片

vue实现放大图片

实现图片放大功能的方法 在Vue中实现图片放大功能,可以通过多种方式实现。以下是几种常见的方法: 使用CSS transform属性 通过CSS的transform: scale()属性实现图片放…