nuxt-lazy-load

Nuxt 3 Lazy Load
462,731
Install
npm install nuxt-lazy-load
Latest Version:3.0.5
Vue:3
License:MIT
Last Updated:Apr 11, 2025
Links: GitLab  ·  npm
Maintainer: dario.ferderber

nuxt-lazy-load

npm i nuxt-lazy-load

npm version npm downloads npm downloads

👉 Description

You don't need to bother with extra attributes on elements (like data-src and data-srcset), just add the module in nuxt.config.js and that's it

⚠️ For Nuxt 2, use nuxt-lazy-load < 3.0.0

🚀 Usage

// nuxt.config.js (nuxt.config.ts)
modules: [
  'nuxt-lazy-load'
]

🔧 Options

modules: [
  'nuxt-lazy-load'
],

lazyLoad: {
  // These are the default values
  images: true,
  videos: true,
  audios: true,
  iframes: true,
  native: false,
  directiveOnly: false,
  
  // Default image must be in the public folder
  defaultImage: '/images/default-image.jpg',

  // To remove class set value to false
  loadingClass: 'isLoading',
  loadedClass: 'isLoaded',
  appendClass: 'lazyLoad',
  
  observerConfig: {
    // See IntersectionObserver documentation
  }
}
directiveOnly

If you don't want to use lazy load on every image/video/audio/iframe, set directiveOnly to true and use directive like this (with data-src/data-srcset/data-poster)

<img data-src="image.png" alt="" title="" v-lazy-load>

You don't need to add directive (v-lazy-load) on source elements

<video data-poster="~/assets/images/poster.jpg" v-lazy-load>
  <source data-src="video.mp4" type="video/mp4"> --> without directive
</video>
data-not-lazy

If you don't want to lazy load single element, just add data-not-lazy attribute

<audio controls="controls" data-not-lazy>
  <source type="audio/mpeg" src="audio.mp3">
</audio>

Buy me a coffee

ko-fi

Related Packages

opti-image

A Vue.js component for handling performant images without the headache. * Webp's...

1,584

Version History

Version Released License
3.0.5 MIT
3.0.4 MIT
3.0.3 MIT
3.0.2 MIT
3.0.1 MIT