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

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()语法实现懒加载,减少初始加载时间。

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

vue实现懒加载的方法

vue实现懒加载的方法

Vue 实现懒加载的方法 路由懒加载 通过动态导入语法拆分路由组件,减少初始加载时间。适用于 Vue Router 配置: const routes = [ { path: '/hom…

vue加载实现分页

vue加载实现分页

Vue 实现分页加载的方法 使用 Element UI 的分页组件 安装 Element UI 后,可以直接使用其分页组件。在模板中添加分页组件,并绑定相关事件和数据。 <template&…

vue commit 方法实现

vue commit 方法实现

Vue 中 Commit 方法的实现 在 Vue 中,commit 方法是 Vuex 的核心功能之一,用于提交 mutation 来修改状态。以下是实现 commit 方法的关键步骤: 初始化 S…

js实现图片加载

js实现图片加载

使用Image对象加载图片 通过JavaScript的Image对象可以动态加载图片,适用于需要预加载或动态插入图片的场景。 const img = new Image(); img.src =…

vue实现无线加载

vue实现无线加载

无限滚动加载的实现 在Vue中实现无限滚动加载(Infinite Scroll)可以通过监听滚动事件或使用现成的库完成。以下是两种常见方法: 使用原生滚动事件监听 通过监听滚动事件判断是否到达页面…