Skip to content

Адаптивные ленивые фоны

Директива v-lazy-img лениво загружает фон, но не умеет srcset. useBackgroundImage() — composable-аналог: ленивая загрузка + адаптивный image-set() (CSS-нативный эквивалент srcset) + blur-up — возвращается как реактивный :style, который вы биндите сами.

vue
<script setup lang="ts">
import { useBackgroundImage } from '@macrulez/vue-image-kit'

const { target, style, isLoaded } = useBackgroundImage('/hero.jpg', {
  placeholder: 'data:image/jpeg;base64,/9j/...',
  densities: [1, 2], // → image-set(url("/hero.jpg") 1x, url("/hero.jpg") 2x)
  rootMargin: '300px',
})
</script>

<template>
  <section ref="target" :style="style" class="hero">
    <h1 v-show="isLoaded">Welcome</h1>
  </section>
</template>

<style scoped>
.hero {
  width: 100%;
  height: 60vh;
}
</style>

Опции

placeholder

string, опционален. URL/data URL, показываемый (размытым) до загрузки полного изображения.

densities

number[], опционален. Строит адаптивный image-set() с записями 1x/2x/….

type

string, опционален. MIME-подсказка для записей image-set() (например, 'image/webp').

lazy

boolean · по умолчанию: true. Отложить загрузку за IntersectionObserver.

rootMargin

string · по умолчанию: '200px'. Корневой отступ IO.

threshold

number · по умолчанию: 0. Порог IO.

transition

string · по умолчанию: '0.4s ease'. Переход blur-up.

backgroundSize

string · по умолчанию: 'cover'. background-size.

backgroundPosition

string · по умолчанию: 'center'. background-position.

Возвращаемое значение

{ target, style, status, isLoaded, isLoading, load }. Прикрепите target через template-ref и забиндите style; вызовите load() для ручного запуска при lazy: false. SSR-безопасно (загрузка откладывается до клиента).