vue-greenborn-image-viewer

Visor de imagen para Vue 3: núcleo de viewport reutilizable con zoom (rueda y botones, centrado en el cursor), pan (Ctrl+arrastre) y rotación libre con preview recortado. Expone un slot para overlays (ej. canvas de anotaciones/detecciones) sincronizados c
655
Install
npm install vue-greenborn-image-viewer
Latest Version:1.0.2
Vue:3
License:MIT
Last Updated:Oct 24, 2026
Links: GitHub  ·  npm
Maintainer: 2012lucho

vue-greenborn-image-viewer

Visor de imagen para Vue 3: núcleo de viewport reutilizable con zoom (rueda del mouse centrado en el cursor, o botones externos), pan (Ctrl + arrastre) y rotación libre con preview recortado al tamaño original.

Este paquete no persiste rotaciones ni recorta píxeles reales: solo ofrece el preview CSS de la rotación libre (prop anguloLibre) y expone un slot para que el consumidor superponga su propio contenido (por ejemplo un <canvas> de anotaciones/detecciones) perfectamente sincronizado con la escala y el recorte. La persistencia (llamadas a una API, confirmaciones, etc.) queda a cargo de la aplicación que lo usa.

Instalación

npm install vue-greenborn-image-viewer
import { GbImageViewer } from 'vue-greenborn-image-viewer'
import 'vue-greenborn-image-viewer/style.css'

Uso básico

<template>
  <GbImageViewer
    ref="visor"
    :src="imagenUrl"
    :ancho="imagen.width"
    :alto="imagen.height"
    :angulo-libre="freeAngle"
    @cargada="onCargada"
    @cambio-viewport="onCambioViewport"
  >
    <template #overlay>
      <canvas
        ref="canvas"
        @wheel.prevent="visor.manejarRueda($event)"
        @mousedown="e => e.ctrlKey && visor.iniciarPaneo(e)"
      />
    </template>
  </GbImageViewer>
</template>

Props

Prop Tipo Default Descripción
src String requerido URL o data-URL de la imagen
alt String '' texto alternativo
ancho Number requerido ancho natural de la imagen
alto Number requerido alto natural de la imagen
anguloLibre Number 0 ángulo (0-360) para el preview CSS de rotación libre
zoomMinFactor Number 0.1 factor mínimo de zoom relativo al fit
zoomMaxAbs Number 32 escala máxima absoluta
mostrarPorcentaje Boolean true muestra una insignia con el % de zoom actual sobre la imagen (el componente lo calcula y lo pinta solo; no requiere que el consumidor lo refleje por evento)

Emits

Evento Payload Descripción
cargada — la imagen terminó de cargar (<img> @load)
cambio-viewport { escala, anchoContenido, altoContenido } cambió la escala efectiva; útil para redimensionar un overlay externo

Slot overlay

Scope disponible: { escala, anguloLibre, estiloTransformPreview, estiloContenido }. Se renderiza dentro del mismo contenedor con recorte (overflow: hidden) que la imagen, así cualquier overlay queda alineado durante zoom/pan/rotación.

Métodos expuestos (ref + defineExpose)

  • escalaActual, fitScale, zoomPercent
  • cambiarZoom(delta), restablecerZoom()
  • origToCanvas(x, y), canvasToOrig(x, y), estaDentroDeImagen(x, y)
  • manejarRueda(wheelEvent) — zoom centrado en el cursor
  • iniciarPaneo(mouseEvent) — pan vía scroll
  • ctrlPresionado, paneando — para feedback de cursor (grab/grabbing) en el overlay

Demo

npm install
npm run dev

Levanta en http://localhost:5175.

Related Packages

vue-panzoom

Vue plugin to zoom/pan dom elements

201,156 96
simple-panzoom

保留 vue3-sketch-ruler 实际用到的功能,移除 SVG、IE 与多指捏合等未用特性,提升性...

1,539 303
vue-openseadragon

OpenSeaDragon component for Vue.js

3,936 29
vue-greenborn-galeria-image

Galería de imágenes para Vue 3: grilla con lazy load y lightbox tipo image-detai...

334 0
vue-zoomable

Tiny and high performance zoom and pan library for Vue 3. It uses CSS Transforms...

145,993 37

Version History

Version Released Vue License
1.0.2 ^3.3.0 MIT
1.0.1 ^3.3.0 MIT
1.0.0 ^3.3.0 MIT
Pre-releases (1)
Version Released License
0.0.0-stage