当前位置:首页 > 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 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 通过数据绑定控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,v-show 只是切换 display 属性。…

vue加载动画实现

vue加载动画实现

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

Vue组件实现方法

Vue组件实现方法

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

vue懒加载实现难吗

vue懒加载实现难吗

Vue懒加载的实现难度 Vue懒加载的实现并不复杂,尤其是借助现代工具和库的支持。懒加载的核心思想是按需加载资源,通常用于路由或组件,以提升页面初始加载速度。以下是常见的实现方法和注意事项: 路…

vue实现加载

vue实现加载

Vue 实现加载功能的方法 使用 v-if 或 v-show 控制加载状态 在模板中通过 v-if 或 v-show 控制加载动画的显示与隐藏。v-if 会完全移除 DOM 元素,而 v-show 仅…

jquery方法

jquery方法

jQuery 核心方法 $() 或 jQuery() 是核心选择器方法,用于获取 DOM 元素或创建 jQuery 对象。支持 CSS 选择器、DOM 元素或 HTML 字符串。 $('#id'…