SoFunction
Updated on 2025-04-12

Detailed explanation of various methods for Vue to implement lazy image loading

Why do you need to lazy load images?

First, let's review why we need to lazy load images. In the absence of lazy images, all images are requested at the same time when the page loads, which can cause the following problems:

  • Delayed page loading time:If the page contains a large number of images, all of which are requested at the same time as the page is loading, it will cause a significant increase in the page loading time and the user will need to wait longer to see the content.

  • Waste bandwidth:Loading images that are not in the visual area is a waste of bandwidth. Users may never see these images, but they will still be downloaded, which wastes users' bandwidth and server resources.

  • Reduce user experience:If the page loads too long, it will reduce the user's experience. Users want to see the content immediately, rather than waiting for the image to load.

The core idea of ​​lazy image loading is to load images only when they appear in the user's visual area, thus solving the above problem.

Use to achieve lazy image loading

Now, let's discuss various ways to use lazy image loading.

Method 1: Custom directives

The first method we introduce is to use custom directives. Custom directives allow us to encapsulate lazy load logic into reusable instructions and then use this directive on image elements that need lazy loading.

<template>
  <div>
    <img v-for="(image, index) in images" :src="image" v-lazyload />
  </div>
</template>
<script>
export default {
  data() {
    return {
      images: [
        '',
        '',
        '',
        // Add more image links      ],
    };
  },
};
</script>

In the above code, we added av-lazyloadInstructions. Next, we need to create this custom directive and add lazy loading logic.

<script>
export default {
  directives: {
    lazyload: {
      inserted(el) {
        // Add lazy loading logic      },
    },
  },
};
</script>

existinsertedIn the hook, we can use the Intersection Observer API to monitor whether the image has entered the visual area. Once the image has entered the visual area, we can load it.

This is a basic custom directive skeleton, and you can further customize lazy loading logic according to project requirements.

Method 2: Use a third-party library

There are some powerful third-party libraries in the ecosystem that can help you quickly achieve lazy image loading. One of them is vue-lazyload.

First, installvue-lazyload

npm install vue-lazyload

Then, introduce it in your application and configure:

<script>
import VueLazyload from 'vue-lazyload';
export default {
  directives: {
    lazyload: VueLazyload, // Use the vue-lazyload directive  },
};
</script>

Now you can use it in the templatev-lazyInstructions to implement lazy image loading:

<template>
  <div>
    <img v-for="(image, index) in images" :src="image" v-lazy="image" />
  </div>
</template>

vue-lazyloadProvides a wealth of configuration options, including preload, error placeholders, load placeholders, etc., which you can customize according to project requirements.

Method 3: Lazy loading based on scrolling events

In some cases, you may not want to use third-party libraries, but tend to write your own image lazy loading logic. This can be achieved by based on scroll events.

First, in your Vue component, bind a method to listen for scrolling events for image elements:

<template>
  <div>
    <img v-for="(image, index) in images" :src="image" ref="lazyImages" @load="onImageLoad(index)" />
  </div>
</template>

exist@loadIn the event, we triggered a methodonImageLoad(index)

Then, in the componentmethodsPartial implementationonImageLoadMethod to detect whether the picture enters the visual area:

<script>
export default {
  methods: {
    onImageLoad(index) {
      const lazyImages = this.$;
      const img = lazyImages[index];
      const rect = ();
      if ( <  &&  >= 0 && !) {
         = ;
      }
    },
  },
};
</script>

This code checks whether each image element enters the visual area and is set only if the image is not loadedsrcproperty. Make sure to set it on the image elementdata-srcproperty.

This is a basic lazy loading method for scrolling events that you can further optimize and scale as needed.

Method 4: Use the lazyload attribute of the mobile terminal

In mobile development, browsers usually support

holdlazyloadProperties, this is a native lazy loading property. You just need toimgAdd on the tagloading="lazy"Properties, the browser will automatically handle the lazy loading of the image.

<template>
  <div>
    <img v-for="(image, index) in images" :src="image" loading="lazy" />
  </div>
</template>

This method is very simple and suitable for mobile application development because it takes advantage of the browser's native support.

Method 5: Use lazy loading CSS class

In some cases, you can use the CSS class to implement lazy image loading. First, add a custom CSS class to all image elements, for examplelazy-load

<template>
  <div>
    <img v-for="(image, index) in images" :src="image" class="lazy-load" />
  </div>
</template>

Then, use JavaScript to detect scrolling events, and when the image enters the visual area, the image element'ssrcThe property is set to the actual URL of the image.

<script>
export default {
  mounted() {
    const lazyImages = ('.lazy-load');
    function lazyLoad() {
      (img => {
        const rect = ();
        if ( <  &&  >= 0 && !) {
           = ;
        }
      });
    }
    ('scroll', lazyLoad);
  },
};
</script>

This approach is suitable for some simple projects, but is not as efficient and maintainable as Intersection Observer.

Method 6: Use Server Rendering (SSR) or Static Generation (SSG)

Finally, if your application uses server-side rendering (SSR) or static generation (SSG) techniques, lazy image loading is usually unnecessary. Because during the server-side rendering or build phase, you can render the image directly into HTML when the page is loading without lazy loading.

This is because in SSR or SSG, you can get the image information at build time or on the server and embed the image URL directly into the generated HTML, thereby reducing requests when the page is loaded. This approach not only improves performance, but also provides better support for search engine optimization (SEO).

Summarize

Lazy image loading is an important performance optimization technique that can significantly reduce page loading time and improve user experience. When choosing a method for lazy loading of images, consider factors such as project requirements, mobile or desktop, browser support, and choose the method that suits you best. Whichever method you choose, you can improve your project performance by lazy loading.

This is the article about the detailed explanation of various methods of Vue to implement lazy image loading. For more related content on Vue to implement lazy image loading, please search for my previous articles or continue browsing the related articles below. I hope everyone will support me in the future!