当前位置:首页 > 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实现atm

vue实现atm

Vue实现ATM机模拟功能 使用Vue.js实现ATM机模拟功能需要结合组件化开发、状态管理以及用户交互逻辑。以下是关键实现步骤: 核心组件结构 创建以下Vue组件构建ATM界面: Car…

vue实现 hover

vue实现 hover

实现 Vue 中的 hover 效果 在 Vue 中实现 hover 效果可以通过多种方式完成,以下是常见的几种方法: 使用 CSS 伪类 最简单的方式是直接使用 CSS 的 :hover 伪类,无…

vue事件实现

vue事件实现

Vue 事件实现方法 在Vue中,事件处理是通过v-on指令或@简写来实现的。以下是几种常见的事件处理方式: 使用v-on指令绑定事件 <button v-on:click="handleC…

vue弹幕实现暂停

vue弹幕实现暂停

实现 Vue 弹幕暂停功能 监听播放状态 通过 v-model 或自定义事件绑定弹幕组件的播放状态,存储一个布尔值(如 isPlaying)控制播放与暂停。在弹幕滚动逻辑中根据该状态判断是否更新位置。…

vue实现组合查询

vue实现组合查询

vue实现组合查询 组合查询通常涉及多个条件的联合筛选,Vue可以结合计算属性、v-model和数组方法实现高效查询。以下是具体实现方式: 数据准备与绑定 在Vue组件中定义查询条件和数据集合:…

vue实现全局变量

vue实现全局变量

在Vue中实现全局变量的几种方法 使用Vue.prototype 通过Vue.prototype可以挂载全局变量或方法,在任何组件中通过this访问。 // main.js Vue.prototyp…