当前位置:首页 > 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中配置:

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支持动态导入语法实现路由级组件懒加载,能有效减少初始加载体积:

基本用法

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>实现按需加载:

vue实现 懒加载

<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实现滚动中断

Vue 实现滚动中断的方法 在 Vue 中实现滚动中断通常涉及监听滚动事件,并在特定条件下阻止默认行为或停止滚动。以下是几种常见方法: 监听滚动事件并阻止默认行为 通过 @scroll 或 @whe…

vue实现通知

vue实现通知

Vue 实现通知功能的方法 使用 Vue 实现通知功能可以通过多种方式实现,以下是一些常见的方法: 使用 Vue 的全局事件总线 在 Vue 中可以通过事件总线实现通知功能。创建一个全局事件总线,然…

vue实现机制

vue实现机制

Vue 实现机制的核心原理 Vue.js 的核心实现机制主要基于响应式系统、虚拟 DOM 和组件化设计。以下是关键实现细节: 响应式系统 Vue 通过 Object.defineProperty(V…

vue 实现循环

vue 实现循环

Vue 实现循环的方法 在 Vue 中,可以使用 v-for 指令来实现循环渲染列表数据。以下是几种常见的循环实现方式: 基本数组循环 <template> <ul>…

vue指令实现

vue指令实现

Vue 指令的实现方式 Vue 指令是特殊的标记,用于在 DOM 元素上应用特定的行为。可以通过全局或局部方式注册自定义指令。 全局注册指令 在 Vue 应用中通过 Vue.directive 方法…

vue弹幕实现

vue弹幕实现

Vue弹幕实现方法 弹幕功能常见于视频直播或评论区,以下是基于Vue的实现方案,涵盖基础弹幕、动画控制及性能优化。 基础弹幕渲染 通过v-for动态渲染弹幕列表,结合CSS实现横向移动效果。弹幕数据…