当前位置:首页 > 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 Router配置。通过import()函数返回Promise,Webpack会自动分割代码块。 const ro…

vue表格实现加载更多

vue表格实现加载更多

实现 Vue 表格加载更多的几种方法 滚动加载(无限滚动) 通过监听滚动事件,当滚动到底部时加载更多数据。适用于长列表或表格。 <template> <div clas…

自己实现vue懒加载

自己实现vue懒加载

Vue 懒加载的实现方式 懒加载(Lazy Loading)是一种优化技术,用于延迟加载非关键资源,提升页面初始加载速度。在 Vue 中,懒加载通常用于路由组件和图片。 路由懒加载 通过动态 imp…

vue 公共的方法实现

vue 公共的方法实现

在 Vue 中实现公共方法的几种方式 使用 Mixin Mixin 是一种分发 Vue 组件中可复用功能的灵活方式。可以定义一个包含公共方法的 Mixin,然后在多个组件中混入。 // 定义公共方法…

Vue动画实现方法步骤

Vue动画实现方法步骤

使用 <transition> 组件 Vue 内置了 <transition> 组件,用于为单个元素或组件添加进入/离开动画。通过 name 属性定义动画类名前缀,Vue 会自…

vue实现列表树加载

vue实现列表树加载

Vue 实现列表树加载 使用递归组件实现树形结构 递归组件是 Vue 中实现树形结构的常见方法。通过组件调用自身,可以轻松处理嵌套数据。 <template> <ul>…