当前位置:首页 > VUE

vue实现 懒加载

2026-02-18 03:24:28VUE

实现图片懒加载

在Vue中实现图片懒加载可以通过IntersectionObserver API或第三方库如vue-lazyload完成。以下是两种方法的实现方式:

使用IntersectionObserver API

<template>
  <img v-lazy="imageUrl" alt="Lazy loaded image">
</template>

<script>
export default {
  directives: {
    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);
      }
    }
  },
  data() {
    return {
      imageUrl: 'https://example.com/image.jpg'
    }
  }
}
</script>

使用vue-lazyload库 安装库:

npm install vue-lazyload

在main.js中配置:

vue实现 懒加载

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 loaded image">

实现路由懒加载

Vue Router支持动态导入语法实现路由级组件懒加载,能有效减少初始加载体积:

vue实现 懒加载

基本用法

const router = new VueRouter({
  routes: [
    {
      path: '/about',
      component: () => import('./views/About.vue')
    }
  ]
})

分组打包 使用webpack的魔法注释可将组件分组打包:

const About = () => import(/* webpackChunkName: "group-about" */ './views/About.vue')
const Contact = () => import(/* webpackChunkName: "group-about" */ './views/Contact.vue')

组件懒加载

对于非路由组件,可使用动态导入配合<component>实现按需加载:

<template>
  <button @click="loadComponent">Load</button>
  <component :is="dynamicComponent"/>
</template>

<script>
export default {
  data() {
    return {
      dynamicComponent: null
    }
  },
  methods: {
    async loadComponent() {
      this.dynamicComponent = await import('./HeavyComponent.vue')
    }
  }
}
</script>

注意事项

  • 图片懒加载应考虑占位图避免布局偏移
  • 路由懒加载需配合webpack等打包工具使用
  • 动态导入的组件需处理加载状态和错误状态
  • 移动端可适当增大IntersectionObserver的rootMargin提前加载
  • 生产环境应配置合适的代码分割策略

以上方法可根据实际需求组合使用,显著提升页面加载性能。

标签: 加载vue
分享给朋友:

相关文章

vue实现打印二维码

vue实现打印二维码

安装二维码生成库 使用 qrcode 或 vue-qrcode 库生成二维码。通过 npm 安装: npm install qrcode vue-qrcode 生成二维码 在 Vue 组件中引…

vue实现付款

vue实现付款

Vue 实现付款功能 在 Vue 中实现付款功能通常需要集成第三方支付网关(如支付宝、微信支付、Stripe 等)。以下是常见的实现方法: 集成支付宝/微信支付 安装必要的依赖(如 axios 用…

vue实现弹窗

vue实现弹窗

Vue 实现弹窗的常见方法 使用组件化方式封装弹窗 创建一个独立的弹窗组件(如 Modal.vue),通过 v-if 或 v-show 控制显示隐藏: <template> <…

vue原型实现

vue原型实现

Vue 原型实现的关键点 Vue.js 的原型系统是其响应式机制的核心部分,通过原型链实现数据的动态绑定和依赖收集。以下是实现 Vue 原型的主要技术要点。 数据响应式原理 Vue 通过 Objec…

vue实现缩放

vue实现缩放

Vue 实现缩放的方法 在 Vue 中实现缩放功能可以通过多种方式完成,以下是一些常见的方法: 使用 CSS transform 属性 通过 CSS 的 transform: scale() 属性可…

vue实现分类

vue实现分类

Vue实现分类功能的方法 使用v-for和计算属性 通过计算属性对数据进行分类处理,结合v-for渲染分类后的列表。示例代码: <template> <div>…