'use client'; import { useEffect, useState } from 'react'; import { Button } from './Button'; import Image from 'next/image'; import Toast from './Toast'; interface ImageZoomModalProps { src: string; alt?: string; onClose: () => void; } export default function ImageZoomModal({ src, alt = 'Bild', onClose }: ImageZoomModalProps) { const [zoom, setZoom] = useState(1); const [translate, setTranslate] = useState({ x: 0, y: 0 }); useEffect(() => { const handleKey = (e: KeyboardEvent) => { if (e.key === 'Escape') onClose(); }; window.addEventListener('keydown', handleKey); return () => window.removeEventListener('keydown', handleKey); }, [onClose]); return (
{ if (e.target === e.currentTarget) { setZoom(1); setTranslate({ x: 0, y: 0 }); onClose(); } }} className="fixed inset-0 z-50 bg-black bg-opacity-80 flex items-center justify-center" >
e.stopPropagation()} className="relative w-full h-full flex items-center justify-center overflow-hidden" > {/* Toast (oben links) – dauerhaft sichtbar */}
ESC
Schließen
Mausrad
Bild zoomen
Linke Maustaste
Bild verschieben
{/* Close Button oben rechts */}
{/* Bild */}
{alt} { e.preventDefault(); const delta = e.deltaY > 0 ? -0.1 : 0.1; setZoom((z) => Math.min(Math.max(z + delta, 1), 5)); }} onMouseDown={(e) => { e.preventDefault(); const startX = e.clientX; const startY = e.clientY; const startTranslate = { ...translate }; const handleMove = (moveEvent: MouseEvent) => { const dx = moveEvent.clientX - startX; const dy = moveEvent.clientY - startY; setTranslate({ x: startTranslate.x + dx, y: startTranslate.y + dy, }); }; const handleUp = () => { window.removeEventListener('mousemove', handleMove); window.removeEventListener('mouseup', handleUp); }; window.addEventListener('mousemove', handleMove); window.addEventListener('mouseup', handleUp); }} />
); }