+-

Botones Magnéticos con Animaciones y Efecto Parallax

Aportación por BarbaraEberle, Jul 24, 2024

Tema anterior - Siguiente tema

BarbaraEberle

En este tutorial, aprenderemos a crear botones con efecto magnético que siguen al puntero del ratón y cuentan con animaciones atractivas al pasar el cursor. También implementaremos un efecto parallax para darle más dinamismo a la animación.



Paso 1: Estructura HTML

Primero, necesitamos crear la estructura básica del HTML para los botones.

html
<!DOCTYPE html>
<html lang="es">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Botones Magnéticos con Efecto Parallax</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <div class="button-container">
        <button class="magnetic-button">¡Haz clic aquí!</button>
    </div>
    <script src="script.js"></script>
</body>
</html>

Paso 2: Estilos CSS

Vamos a agregar los estilos necesarios para nuestros botones y las animaciones.

css
/* styles.css */
body {
    margin: 0;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background-color: #f0f0f0;
}

.button-container {
    position: relative;
}

.magnetic-button {
    padding: 15px 30px;
    border: none;
    background-color: #ff6f61;
    color: white;
    font-size: 16px;
    font-weight: bold;
    border-radius: 5px;
    cursor: pointer;
    position: relative;
    overflow: hidden;
    transition: transform 0.3s ease, box-shadow 0.3s ease;
}

.magnetic-button::before {
    content: '';
    position: absolute;
    top: 50%;
    left: 50%;
    width: 150%;
    height: 150%;
    background-color: rgba(0, 0, 0, 0.2);
    border-radius: 50%;
    transform: translate(-50%, -50%);
    transition: transform 0.3s ease;
    z-index: 0;
}

.magnetic-button:hover {
    transform: scale(1.1);
    box-shadow: 0 4px 10px rgba(0, 0, 0, 0.3);
}

.magnetic-button:hover::before {
    transform: translate(-50%, -50%) scale(1.3);
}

Paso 3: Funcionalidad JavaScript

Ahora, agregaremos la funcionalidad para que el botón siga el puntero del ratón.

javascript
// script.js
document.addEventListener('DOMContentLoaded', () => {
    const button = document.querySelector('.magnetic-button');

    document.addEventListener('mousemove', (event) => {
        const { clientX: mouseX, clientY: mouseY } = event;
        const { offsetLeft: buttonX, offsetTop: buttonY, offsetWidth: buttonWidth, offsetHeight: buttonHeight } = button;

        const buttonCenterX = buttonX + buttonWidth / 2;
        const buttonCenterY = buttonY + buttonHeight / 2;

        const deltaX = mouseX - buttonCenterX;
        const deltaY = mouseY - buttonCenterY;

        const maxOffset = 20;
        const offsetX = Math.max(-maxOffset, Math.min(maxOffset, deltaX / 10));
        const offsetY = Math.max(-maxOffset, Math.min(maxOffset, deltaY / 10));

        button.style.transform = `translate(${offsetX}px, ${offsetY}px)`;
    });
});

Explicación del Código

- HTML: Creamos una estructura básica con un botón dentro de un contenedor.
- CSS: Definimos los estilos para el botón, incluyendo el efecto de sombra y las animaciones al pasar el cursor.
- JavaScript: Implementamos la funcionalidad para que el botón siga el puntero del ratón. El cálculo del desplazamiento se realiza en base a la posición del ratón y la posición del botón.

¡Y eso es todo! Ahora tienes botones magnéticos que siguen al puntero del ratón y cuentan con animaciones atractivas y un efecto parallax. Puedes ajustar los estilos y el comportamiento según tus necesidades para crear efectos personalizados. ¡Diviértete experimentando!

Aportación rápida

Nota: este mensaje no se mostrará hasta que sea aprobado por un moderador.

Nombre:
Correo electrónico:
Atajos: ALT+S para publicar/enviar o ALT+P para previsualizar

Open Access

Únete a nosotros en nuestro compromiso de promover el acceso abierto y la difusión del conocimiento. Tu apoyo financiero nos permite continuar con nuestros proyectos de Open Access. Además, como agradecimiento, recibirás una hermosa página web como regalo. ¡Juntos podemos hacer la diferencia en el mundo del conocimiento abierto!

Powered by EzPortal