当前位置:首页 > VUE

vue实现懒加载的方法

2026-01-07 04:57:59VUE

vue实现懒加载的方法

使用Vue的<img>标签结合IntersectionObserver

在Vue组件中,通过IntersectionObserver监听图片是否进入视口,动态加载图片资源。这种方式适用于现代浏览器,性能较好。

<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: 'path/to/image.jpg'
    };
  }
};
</script>

使用第三方库vue-lazyload

vue-lazyload是一个流行的Vue懒加载插件,支持图片、背景图等资源的懒加载。安装后全局配置即可使用。

npm install vue-lazyload

main.js中配置插件:

vue实现懒加载的方法

import VueLazyload from 'vue-lazyload';

Vue.use(VueLazyload, {
  preLoad: 1.3,
  error: 'path/to/error-image.png',
  loading: 'path/to/loading-image.gif',
  attempt: 3
});

在组件中使用:

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

路由懒加载

对于Vue Router的路由组件,可以使用动态import()语法实现懒加载,减少初始加载时间。

vue实现懒加载的方法

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

使用v-lazy指令结合自定义加载状态

可以自定义加载中和加载失败的占位图,提升用户体验。

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

<script>
export default {
  directives: {
    lazy: {
      inserted(el, binding) {
        el.src = 'path/to/placeholder.png';
        const observer = new IntersectionObserver((entries) => {
          entries.forEach(entry => {
            if (entry.isIntersecting) {
              const img = new Image();
              img.src = binding.value;
              img.onload = () => {
                el.src = binding.value;
              };
              img.onerror = () => {
                el.src = 'path/to/error.png';
              };
              observer.unobserve(el);
            }
          });
        });
        observer.observe(el);
      }
    }
  }
};
</script>

使用loading="lazy"原生属性

现代浏览器支持loading="lazy"属性,简单实现图片懒加载,无需额外代码。

<template>
  <img :src="imageUrl" loading="lazy" alt="Lazy-loaded image">
</template>

注意事项

  • IntersectionObserver不兼容IE,需使用polyfill。
  • 路由懒加载的组件会生成单独的chunk文件。
  • vue-lazyload支持更多高级功能,如延迟加载、重试机制等。
  • 原生loading="lazy"属性兼容性需检查目标浏览器支持情况。

标签: 加载方法
分享给朋友:

相关文章

vue实现方法

vue实现方法

Vue 实现方法 Vue 是一种流行的前端框架,用于构建用户界面和单页应用。以下是几种常见的 Vue 实现方法: 创建 Vue 实例 通过 new Vue() 创建一个 Vue 实例,传入配置对象…

vue实现加载

vue实现加载

Vue 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 通过数据绑定控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,v-show 只是切换 display 属性。…

vue加载动画实现

vue加载动画实现

Vue 加载动画的实现方法 在 Vue 中实现加载动画可以通过多种方式完成,以下是一些常见的方法: 使用 CSS 动画 通过 CSS 定义动画效果,结合 Vue 的动态类绑定或条件渲染控制动画的显…

vue 实现异步加载

vue 实现异步加载

Vue 实现异步加载的方法 使用动态 import 实现组件懒加载 在 Vue 中可以通过动态 import() 语法实现组件的异步加载,这会使得组件在需要时才被加载,减少初始加载时间。 cons…

vue滚动加载实现

vue滚动加载实现

vue滚动加载实现 滚动加载是一种常见的优化手段,通过监听滚动事件动态加载数据,减少初始渲染压力。以下是几种实现方式: 使用IntersectionObserver API Intersection…

Vue组件实现方法

Vue组件实现方法

Vue组件的基本实现方法 Vue组件是Vue.js的核心概念之一,用于构建可复用的UI模块。以下是Vue组件的几种常见实现方式: 单文件组件(SFC) 使用.vue文件格式,将模板、脚本和样式封装在…