Para asegurarnos de que la imagen vuelva a su posición original en
(0, 0) dentro del contenedor
video-container cuando se reduzca a su tamaño original, vamos a asegurarnos de que el código resetea correctamente la posición después de que la imagen pierde la clase
zoom.
### Ajuste en JavaScript
Te proporciono el código modificado, asegurándonos de restablecer la posición y no hacer que la imagen se mueva fuera del contenedor:
JavaScript:
let isMoving = false;
let startX, startY, initialX, initialY;
$(document).on("click", ".vid-player", function() {
$(this).toggleClass('zoom'); // Alterna la clase 'zoom' al hacer clic
});
$(document).on("mousedown", ".vid-player.zoom", function(event) {
isMoving = true;
startX = event.clientX;
startY = event.clientY;
initialX = $(this).position().left; // Posición inicial de la imagen
initialY = $(this).position().top; // Guarda la posición original
$(this).addClass('moving'); // Cambia el cursor
}).on("mousemove", ".vid-player.zoom", function(event) {
if (isMoving) {
const dx = event.clientX - startX;
const dy = event.clientY - startY;
let newLeft = initialX + dx;
let newTop = initialY + dy;
// Limitar el movimiento dentro de video-container
const container = $(this).parent();
const containerWidth = container.width();
const containerHeight = container.height();
const imageWidth = $(this).width() * 1.5; // Tamaño máximo de la imagen al hacer zoom
const imageHeight = $(this).height() * 1.5; // Tamaño máximo de la imagen al hacer zoom
// Verificar límites
if (newLeft > 0) newLeft = 0;
if (newTop > 0) newTop = 0;
if (newLeft < containerWidth - imageWidth) newLeft = containerWidth - imageWidth;
if (newTop < containerHeight - imageHeight) newTop = containerHeight - imageHeight;
$(this).css({
left: newLeft + 'px',
top: newTop + 'px',
});
}
}).on("mouseup mouseleave", ".vid-player.zoom", function() {
isMoving = false;
$(this).removeClass('moving'); // Restaura el cursor
if (!$(this).hasClass('zoom')) {
// Al volver al tamaño original, reposiciona la imagen
$(this).css({ top: 0, left: 0 }); // Restablece a la posición original dentro del contenedor
}
});
### Puntos Clave:
1.
Restablecimiento de Posición: En la sección del evento
mouseup y
mouseleave, se asegura que cuando la clase
zoom no está presente (la imagen ha vuelto a su tamaño original), la imagen vuelve a su posición original en
(0, 0) dentro del contenedor.
2.
CSS: Verifica que tu CSS tenga bien configuradas las propiedades necesarias como
position: absolute; en la imagen y
position: relative; en el contenedor, como se mostró antes.
### Ejemplo Completo
Para referencia, aquí tienes el HTML, CSS y JavaScript corregido:
#### HTML
HTML:
<!DOCTYPE html>
<html lang="es">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Zoom y Movimiento de Imagen</title>
<link rel="stylesheet" href="styles.css"> <!-- Enlaza tu CSS aquí -->
<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script> <!-- Incluye jQuery -->
</head>
<body>
<div class="video-container">
<img src="ruta/de/tu/imagen.jpg" class="vid-player" alt="Descripción de la imagen">
</div>
<script src="script.js"></script> <!-- Enlaza tu JavaScript aquí -->
</body>
</html>
#### CSS (styles.css)
CSS:
.video-container {
position: relative; /* Necesario para el posicionamiento de la imagen */
width: 500px; /* El ancho del contenedor (ajústalo según necesites) */
height: 500px; /* La altura del contenedor (ajústalo según necesites) */
overflow: hidden; /* Asegura que cualquier desbordamiento se oculte */
}
.vid-player {
transition: transform 0.3s ease; /* Suave zoom */
cursor: grab; /* Cambia el cursor al pasar el mouse */
position: absolute; /* Cambiado a absolute para permitir movimiento */
top: 0; /* Posición inicial */
left: 0; /* Posición inicial */
}
.vid-player.zoom {
transform: scale(1.5); /* Aumenta el tamaño de la imagen */
}
.vid-player.moving {
cursor: grabbing; /* Cambia el cursor mientras se mueve */
}
### Probar los Cambios
1. Asegúrate de que todos los archivos estén correctamente enlazados.
2. Carga el documento HTML en tu navegador.
3. Comprueba que la imagen se mueva dentro de los límites y que regrese a
(0, 0) al quitar el zoom.
Con estos ajustes, la interacción debería funcionar como esperas. Si sigues teniendo problemas, házmelo saber y seguiré ayudándote.