当前位置:首页 > VUE

vue 实现懒加载

2026-02-18 13:17:38VUE

Vue 实现懒加载的方法

使用 v-lazy 指令(需安装插件)

安装 vue-lazyload 插件:

npm install vue-lazyload --save

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 Image">

路由懒加载(动态导入)

通过动态 import() 语法实现路由组件懒加载:

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

组件懒加载

使用 defineAsyncComponent 异步加载组件:

import { defineAsyncComponent } from 'vue'

const AsyncComponent = defineAsyncComponent(() =>
  import('./components/AsyncComponent.vue')
)

export default {
  components: {
    AsyncComponent
  }
}

图片懒加载(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="Lazy Image">

懒加载占位策略

为懒加载元素添加加载状态:

<div v-if="isLoading">Loading...</div>
<img v-else v-lazy="imageUrl">

<script>
export default {
  data() {
    return {
      isLoading: true
    }
  },
  mounted() {
    this.loadImage()
  },
  methods: {
    loadImage() {
      const img = new Image()
      img.onload = () => {
        this.isLoading = false
      }
      img.src = this.imageUrl
    }
  }
}
</script>

性能优化建议

  • 设置合理的预加载阈值(如 preLoad: 1.3
  • 提供高质量的占位图或加载动画
  • 对移动端可降低图片质量要求
  • 结合 WebP 等现代图片格式
  • 使用 CDN 加速资源加载

以上方法可根据具体场景组合使用,路由懒加载适用于SPA应用,图片懒加载适合媒体资源密集页面。

vue 实现懒加载

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

相关文章

vue表格重置怎么实现

vue表格重置怎么实现

重置表格数据的方法 在Vue中重置表格数据通常需要操作绑定的数据源,以下是几种常见实现方式: 直接重置数据源 // 假设表格绑定的是tableData this.tableData = [...t…

vue实现下载暂停

vue实现下载暂停

Vue实现下载暂停功能 在Vue中实现下载暂停功能,通常需要结合XMLHttpRequest或Fetch API的AbortController来控制请求中断。以下是具体实现方法: 使用XMLH…

vue实现选中单元格

vue实现选中单元格

Vue 实现选中单元格的方法 基础实现思路 在 Vue 中实现选中单元格功能,通常可以通过动态绑定 class 或 style 来实现。以下是一个基于表格的简单实现示例: <template…

vue 实现递归

vue 实现递归

Vue 实现递归组件的方法 在 Vue 中实现递归组件通常用于处理树形结构数据,例如菜单、评论列表或文件目录。以下是实现递归组件的关键步骤: 定义递归组件 递归组件需要设置 name 属性,以便在…

利用vue 实现

利用vue 实现

以下是利用 Vue 实现常见功能的几种方法,分为不同场景和技术要点: 数据绑定与响应式更新 Vue 的核心特性是数据绑定,通过 v-model 实现双向绑定: <template>…

vue 实现登录

vue 实现登录

Vue 实现登录功能 创建登录表单组件 在 Vue 项目中创建一个登录表单组件(如 Login.vue),包含用户名和密码输入框以及提交按钮。使用 v-model 实现双向数据绑定。 <tem…