Skip to content
API 风格:

Image ​

Image avec espace réservé en cas d'échec de chargement, avec option de prévisualisation plein écran (zoom / rotation / parcours de plusieurs images). Utilise les attributs natifs loading="lazy" + decoding="async".

Utilisation de base ​

Utilisation de base
Image d'exemple
vue
<script setup lang="ts">
</script>

<template>
  <!-- Utilisation de base -->
  <LhImage src="https://picsum.photos/240/140" alt="Image d'exemple" width="240" style="width: 240px" />
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- Utilisation de base -->
  <LhImage src="https://picsum.photos/240/140" alt="Image d'exemple" width="240" style="width: 240px" />
</template>

Prévisualisation ​

Prévisualisation au clic
Image prévisualisable
vue
<script setup lang="ts">
</script>

<template>
  <!-- Prévisualisation au clic -->
  <LhImage
    src="https://picsum.photos/240/140?random=2"
    alt="Image prévisualisable"
    preview
    :preview-src-list="['https://picsum.photos/600/400?random=2', 'https://picsum.photos/600/400?random=3']"
    style="width: 240px"
  />
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- Prévisualisation au clic -->
  <LhImage
    src="https://picsum.photos/240/140?random=2"
    alt="Image prévisualisable"
    preview
    :preview-src-list="['https://picsum.photos/600/400?random=2', 'https://picsum.photos/600/400?random=3']"
    style="width: 240px"
  />
</template>

Recadrage et chargement différé ​

fit correspond à la propriété native object-fit ; lazy active le chargement différé natif (le chargement n'a lieu qu'à l'entrée dans la zone d'affichage). La visionneuse LhImageViewer peut être utilisée de manière autonome et reçoit images et initial-index.

Modes de recadrage fit
fit=fillfit=containfit=coverfit=nonefit=scale-down
Chargement différé
Image à chargement différé 1Image à chargement différé 2Image à chargement différé 3Image à chargement différé 4
vue
<script setup lang="ts">
</script>

<template>
  <!-- Modes de recadrage fit -->
  <LhImage
    v-for="f in ['fill', 'contain', 'cover', 'none', 'scale-down']"
    :key="f"
    src="https://picsum.photos/240/140"
    :alt="`fit=${f}`"
    :fit="f"
    style="width: 110px; height: 80px"
  />
  <!-- Chargement différé -->
  <div style="max-height: 120px; overflow-y: auto; width: 100%">
    <LhImage
      v-for="i in 4"
      :key="i"
      :src="`https://picsum.photos/240/120?random=${i}`"
      :alt="`Image à chargement différé ${i}`"
      lazy
      style="width: 240px; display: block; margin-bottom: 8px"
    />
  </div>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- Modes de recadrage fit -->
  <LhImage
    v-for="f in ['fill', 'contain', 'cover', 'none', 'scale-down']"
    :key="f"
    src="https://picsum.photos/240/140"
    :alt="`fit=${f}`"
    :fit="f"
    style="width: 110px; height: 80px"
  />
  <!-- Chargement différé -->
  <div style="max-height: 120px; overflow-y: auto; width: 100%">
    <LhImage
      v-for="i in 4"
      :key="i"
      :src="`https://picsum.photos/240/120?random=${i}`"
      :alt="`Image à chargement différé ${i}`"
      lazy
      style="width: 240px; display: block; margin-bottom: 8px"
    />
  </div>
</template>

Visionneuse autonome ​

LhImageViewer peut être utilisé indépendamment de LhImage : images reçoit la liste d'images et initial-index désigne l'image de départ.

Visionneuse autonome
vue
<script setup lang="ts">
</script>

<template>
  <!-- Visionneuse autonome -->
  <LhImageViewer
    :images="['https://picsum.photos/600/400?random=11', 'https://picsum.photos/600/400?random=12']"
    :initial-index="1"
  >
    <LhButton>Ouvrir la galerie (à partir de la 2ᵉ)</LhButton>
  </LhImageViewer>
</template>
vue
<script>
export default {}
</script>

<template>
  <!-- Visionneuse autonome -->
  <LhImageViewer
    :images="['https://picsum.photos/600/400?random=11', 'https://picsum.photos/600/400?random=12']"
    :initial-index="1"
  >
    <LhButton>Ouvrir la galerie (à partir de la 2ᵉ)</LhButton>
  </LhImageViewer>
</template>

API ​

LhImage Props ​

PropriétéDescriptionTypeValeur par défaut
srcAdresse de l'imagestring—
altTexte alternatif (exigence forte d'accessibilité, obligatoire au niveau TS)string—
fitMode de recadrage (object-fit natif)"contain" | "cover" | "fill" | "none" | "scale-down"'cover'
previewPrévisualisation au clicbooleanfalse
previewSrcListListe des images à prévisualiser (en l'absence de valeur, repli sur [src])string[]—
lazyChargement différé natif (loading="lazy")booleanfalse
sxPropriétés de mise en page rapide sxLhSxProps—

LhImageViewer Props ​

PropriétéDescriptionTypeValeur par défaut
imagesListe des images à prévisualiserstring[]—
initialIndexIndice de l'image affichée au départnumber0
sxPropriétés de mise en page rapide sx (appliquées à l'image prévisualisée)LhSxProps—

Events ​

ÉvénementDescriptionParamètre de rappel
loadDéclenché lorsque l'image est chargée avec succès(event: Event)
errorDéclenché en cas d'échec de chargement de l'image (bascule vers l'espace réservé d'échec)(event: Event)

Slots : error (espace réservé d'échec), placeholder.

LhImageViewer est exporté séparément et permet également d'écouter les événements close (fermeture de la prévisualisation, également déclenchée par Échap) et switch (changement d'image, y compris par les flèches directionnelles).

Accessibilité ​

  • alt est obligatoire au niveau TS, afin d'exclure toute image sans texte alternatif
  • La visionneuse repose sur role="dialog" + aria-modal="true", avec piège de focus, fermeture par Échap et changement d'image par les flèches ; tous les boutons de la barre d'outils sont nommés (agrandir / réduire / pivoter / image précédente / image suivante / fermer)
  • Les transitions de rotation et de zoom respectent prefers-reduced-motion

Définitions de types ​

Les structures de types TypeScript exportées par ce composant sont présentées ci-dessous (extraction automatique à partir des sources packages/components/image/src/types.ts et @lh-ui/share/core/* ; cliquez sur chaque entrée pour afficher la définition complète ; la description des propriétés se trouve dans le tableau Props ci-dessus) :

LhImageProps
ts
export interface LhImageProps {
  /** Adresse de l'image */
  src: string
  /** Texte alternatif (exigence forte d'accessibilité, obligatoire au niveau TS) */
  alt: string
  /** Mode de recadrage (object-fit natif) */
  fit?: LhImageFit
  /** Prévisualisation au clic */
  preview?: boolean
  /** Liste des images à prévisualiser (en l'absence de valeur, repli sur [src]) */
  previewSrcList?: string[]
  /** Chargement différé natif (loading="lazy") */
  lazy?: boolean
  /** Propriétés de mise en page rapide sx */
  sx?: LhSxProps
}
LhImageViewerProps
ts
/** Props de la visionneuse (LhImageViewer est exporté séparément) */
export interface LhImageViewerProps {
  /** Liste des images à prévisualiser */
  images: string[]
  /** Indice de départ */
  initialIndex?: number
  /** Propriétés de mise en page rapide sx (appliquées à l'image prévisualisée) */
  sx?: LhSxProps
}
LhImageFit (provient de @lh-ui/share/core/image)
ts
/** Mode de recadrage de l'image (object-fit natif) */
export type LhImageFit = 'contain' | 'cover' | 'fill' | 'none' | 'scale-down'

Constantes ​

Les constantes publiques utilisées par ce composant sont les suivantes (cliquez sur l'entrée correspondante dans la colonne « Type / Valeur par défaut » du tableau Props pour y accéder) :

LH_IMAGE_ZOOM_MIN (provient de @lh-ui/share/core/image)
ts
/** Limite de zoom inférieure */
export const LH_IMAGE_ZOOM_MIN = 0.25
LH_IMAGE_ZOOM_MAX (provient de @lh-ui/share/core/image)
ts
/** Limite de zoom supérieure */
export const LH_IMAGE_ZOOM_MAX = 4
LH_IMAGE_ZOOM_STEP (provient de @lh-ui/share/core/image)
ts
/** Pas de zoom */
export const LH_IMAGE_ZOOM_STEP = 0.25

La beauté de la tradition, la fondation du code