Skip to content

Предзагрузка изображений

useImagePreloader() предзагружает пакет изображений перед навигацией — полезно для галерей и каруселей, где нужно, чтобы следующий слайд уже был закэширован к моменту, когда пользователь до него доберётся.

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

const { preload, progress, isComplete, errors } = useImagePreloader()

async function goToNextSlide() {
  await preload(['/slide-2.jpg', '/slide-3.jpg'])
  // Все изображения закэшированы — переход мгновенный
  currentSlide.value++
}
</script>

<template>
  <div v-if="!isComplete">Loading {{ progress }}%…</div>
</template>

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

preload

(urls: string[]) => Promise<void>. Запускает загрузку каждого URL из массива параллельно; резолвится, когда каждый либо загрузился, либо упал (никогда не реджектится — упавший URL записывается в errors). Повторный вызов сбрасывает loaded/errors и начинает новый пакет.

loaded

Ref<number>. Счётчик URL, которые уже определились (загрузились или упали) в текущем пакете.

total

ComputedRef<number>. Размер текущего пакета.

progress

ComputedRef<number>. 0100, Math.round((loaded / total) * 100).

isComplete

ComputedRef<boolean>. true, когда каждый URL в пакете определился.

errors

Ref<string[]>. URL, которые не удалось загрузить, в порядке возникновения ошибок.

Учёт сети по умолчанию

preload() молча ничего не делает (резолвится сразу, без единого запроса), когда у соединения пользователя включён saveData — предзагрузка обменивает трафик на более плавный будущий переход, что становится неверным компромиссом, раз пользователь явно попросил браузер/ОС экономить трафик. Отключить это поведение нельзя — оно не выставлено как параметр, который можно передать.