Atracción Magnética FAQ
Un componente FAQ interactivo con efectos hover magnéticos y animaciones basadas en atracción
Diseño Responsivo
Sí
Soporte para Modo Oscuro
No
líneas
280
Compatibilidad del Navegador
No
Vista Previa en Vivo
Interactúa con el componente sin salir de la página.
Componente de Atracción Magnética FAQ
Un componente FAQ interactivo con efectos hover magnéticos y animaciones basadas en atracción para una experiencia de usuario inspirada en física.
Características
- Atracción Magnética: Los elementos responden a la proximidad del cursor con efectos de atracción realistas
- Animaciones Basadas en Física: Movimiento natural usando cálculos de distancia y propiedades de transformación
- Transiciones Suaves: Animaciones elegantes para expandir y contraer elementos del FAQ
- Retroalimentación Visual Dinámica: Cambios visuales indican el estado de atracción magnética
- Optimizado para Rendimiento: Animaciones aceleradas por hardware para rendimiento suave de 60fps
- Totalmente Responsive: Se adapta a todos los tamaños de pantalla manteniendo efectos magnéticos
Estructura HTML
<div class="magnetic-faq-container">
<div class="faq-header">
<h2 class="faq-title">Sistema FAQ Magnético</h2>
<p class="faq-subtitle">Atrayendo respuestas con fuerza magnética</p>
</div>
<div class="faq-list">
<div class="faq-item" data-magnetic>
<div class="faq-question">
<div class="magnetic-dot"></div>
<h3>¿Qué es el diseño de atracción magnética?</h3>
<div class="question-icon">+</div>
</div>
<div class="faq-answer">
<p>El diseño de atracción magnética usa animaciones basadas en física para crear elementos interactivos que responden a la proximidad del cursor con efectos de atracción realistas.</p>
</div>
</div>
<div class="faq-item" data-magnetic>
<div class="faq-question">
<div class="magnetic-dot"></div>
<h3>¿Cómo funcionan los efectos magnéticos?</h3>
<div class="question-icon">+</div>
</div>
<div class="faq-answer">
<p>Los efectos usan JavaScript para calcular la distancia del cursor y aplicar transformaciones CSS para crear comportamientos de atracción y repulsión realistas.</p>
</div>
</div>
<div class="faq-item" data-magnetic>
<div class="faq-question">
<div class="magnetic-dot"></div>
<h3>¿Están optimizados estos efectos para rendimiento?</h3>
<div class="question-icon">+</div>
</div>
<div class="faq-answer">
<p>Sí, las animaciones usan aceleración por hardware y requestAnimationFrame eficiente para rendimiento suave de 60fps.</p>
</div>
</div>
<div class="faq-item" data-magnetic>
<div class="faq-question">
<div class="magnetic-dot"></div>
<h3>¿Puedo personalizar la fuerza de atracción?</h3>
<div class="question-icon">+</div>
</div>
<div class="faq-answer">
<p>¡Absolutamente! El componente usa propiedades CSS personalizadas y parámetros JavaScript para fácil personalización de fuerza magnética y efectos.</p>
</div>
</div>
</div>
</div>Estilos CSS
.magnetic-faq-container {
max-width: 800px;
margin: 2rem auto;
padding: 2rem;
font-family: 'Inter', sans-serif;
background: #0f172a;
position: relative;
overflow: hidden;
border-radius: 20px;
box-shadow: 0 20px 40px rgba(0, 0, 0, 0.5);
}
.faq-header {
text-align: center;
margin-bottom: 3rem;
position: relative;
z-index: 2;
}
.faq-title {
font-size: 2.5rem;
margin-bottom: 0.5rem;
color: #e2e8f0;
text-shadow: 0 2px 10px rgba(0, 0, 0, 0.3);
}
.faq-subtitle {
color: #94a3b8;
font-size: 1.1rem;
}
.faq-list {
display: flex;
flex-direction: column;
gap: 1rem;
position: relative;
z-index: 2;
}
.faq-item {
background: rgba(30, 41, 59, 0.7);
border: 1px solid rgba(148, 163, 184, 0.2);
border-radius: 16px;
overflow: hidden;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
box-shadow: 0 8px 32px rgba(0, 0, 0, 0.3);
position: relative;
transform: translateZ(0);
will-change: transform;
}
.faq-item::before {
content: '';
position: absolute;
top: 0;
left: 0;
right: 0;
height: 2px;
background: linear-gradient(90deg, transparent, #60a5fa, transparent);
transform: translateX(-100%);
}
.faq-item:hover {
background: rgba(30, 41, 59, 0.9);
border-color: rgba(148, 163, 184, 0.4);
box-shadow: 0 12px 40px rgba(0, 0, 0, 0.4);
}
.faq-item.magnetic-active {
border-color: #60a5fa;
box-shadow: 0 0 20px rgba(96, 165, 250, 0.3);
}
.faq-question {
display: flex;
align-items: center;
padding: 1.5rem;
cursor: pointer;
position: relative;
}
.magnetic-dot {
width: 12px;
height: 12px;
border-radius: 50%;
background: #60a5fa;
margin-right: 1rem;
position: relative;
transition: all 0.3s ease;
}
.faq-item.magnetic-active .magnetic-dot {
background: #3b82f6;
transform: scale(1.3);
box-shadow: 0 0 15px rgba(96, 165, 250, 0.6);
}
.faq-question h3 {
margin: 0;
font-size: 1.2rem;
color: #e2e8f0;
flex: 1;
transition: color 0.3s ease;
}
.faq-item.magnetic-active .faq-question h3 {
color: #60a5fa;
}
.question-icon {
font-size: 1.5rem;
color: #94a3b8;
transition: all 0.3s ease;
width: 30px;
height: 30px;
display: flex;
align-items: center;
justify-content: center;
}
.faq-item.magnetic-active .question-icon {
color: #60a5fa;
transform: scale(1.2);
}
.faq-item.active .question-icon {
transform: rotate(45deg);
}
.faq-item.magnetic-active.active .question-icon {
transform: rotate(45deg) scale(1.2);
}
.faq-answer {
padding: 0 1.5rem;
max-height: 0;
overflow: hidden;
transition: all 0.4s cubic-bezier(0.4, 0, 0.2, 1);
background: rgba(15, 23, 42, 0.5);
border-top: 1px solid rgba(148, 163, 184, 0.1);
}
.faq-item.active .faq-answer {
padding: 0 1.5rem 1.5rem;
max-height: 200px;
}
.faq-answer p {
margin: 1rem 0 0 0;
color: #cbd5e1;
line-height: 1.6;
}
@media (max-width: 768px) {
.magnetic-faq-container {
padding: 1rem;
}
.faq-title {
font-size: 2rem;
}
.faq-question {
padding: 1rem;
}
.faq-question h3 {
font-size: 1rem;
}
}Funcionalidad JavaScript
document.addEventListener('DOMContentLoaded', function() {
const faqItems = document.querySelectorAll('.faq-item[data-magnetic]');
// Magnetic effect functionality
faqItems.forEach(item => {
const question = item.querySelector('.faq-question');
// FAQ accordion functionality
question.addEventListener('click', () => {
const isActive = item.classList.contains('active');
// Close all other items
faqItems.forEach(otherItem => {
if (otherItem !== item) {
otherItem.classList.remove('active');
}
});
// Toggle current item
if (isActive) {
item.classList.remove('active');
} else {
item.classList.add('active');
}
});
// Magnetic attraction effect
const handleMouseMove = (e) => {
const rect = item.getBoundingClientRect();
const centerX = rect.left + rect.width / 2;
const centerY = rect.top + rect.height / 2;
const distanceX = e.clientX - centerX;
const distanceY = e.clientY - centerY;
const distance = Math.sqrt(distanceX * distanceX + distanceY * distanceY);
const maxDistance = 200;
if (distance < maxDistance) {
const strength = 1 - (distance / maxDistance);
const moveX = (distanceX / maxDistance) * strength * 10;
const moveY = (distanceY / maxDistance) * strength * 10;
item.style.transform = `translate(${moveX}px, ${moveY}px)`;
item.classList.add('magnetic-active');
} else {
item.style.transform = 'translate(0, 0)';
item.classList.remove('magnetic-active');
}
};
const handleMouseLeave = () => {
item.style.transform = 'translate(0, 0)';
item.classList.remove('magnetic-active');
};
document.addEventListener('mousemove', handleMouseMove);
item.addEventListener('mouseleave', handleMouseLeave);
});
});Guía de Implementación
- Copia la estructura HTML en tu proyecto
- Agrega los estilos CSS a tu hoja de estilos
- Incluye el código JavaScript en tu archivo de script
- Personaliza la fuerza magnética y los efectos visuales para que coincidan con tu marca
- Agrega tus propias preguntas y respuestas del FAQ
El componente de atracción magnética FAQ presenta animaciones basadas en física que responden a la proximidad del cursor con efectos de atracción realistas. Los elementos se mueven naturalmente hacia el cursor, creando una experiencia de usuario atractiva e interactiva que parece atracción magnética.
HTML
52
líneas
CSS
170
líneas
JavaScript
58
líneas
<div class="magnetic-faq-container">
<div class="faq-header">
<h2 class="faq-title">Sistema FAQ Magnético</h2>
<p class="faq-subtitle">Atrayendo respuestas con fuerza magnética</p>
</div>
<div class="faq-list">
<div class="faq-item" data-magnetic>
<div class="faq-question">
<div class="magnetic-dot"></div>
<h3>¿Qué es el diseño de atracción magnética?</h3>
<div class="question-icon">+</div>
</div>
<div class="faq-answer">
<p>El diseño de atracción magnética usa animaciones basadas en física para crear elementos interactivos que responden a la proximidad del cursor con efectos de atracción realistas.</p>
</div>
</div>
<div class="faq-item" data-magnetic>
<div class="faq-question">
<div class="magnetic-dot"></div>
<h3>¿Cómo funcionan los efectos magnéticos?</h3>
<div class="question-icon">+</div>
</div>
<div class="faq-answer">
<p>Los efectos usan JavaScript para calcular la distancia del cursor y aplicar transformaciones CSS para crear comportamientos de atracción y repulsión realistas.</p>
</div>
</div>
<div class="faq-item" data-magnetic>
<div class="faq-question">
<div class="magnetic-dot"></div>
<h3>¿Están optimizados estos efectos para rendimiento?</h3>
<div class="question-icon">+</div>
</div>
<div class="faq-answer">
<p>Sí, las animaciones usan aceleración por hardware y requestAnimationFrame eficiente para rendimiento suave de 60fps.</p>
</div>
</div>
<div class="faq-item" data-magnetic>
<div class="faq-question">
<div class="magnetic-dot"></div>
<h3>¿Puedo personalizar la fuerza de atracción?</h3>
<div class="question-icon">+</div>
</div>
<div class="faq-answer">
<p>¡Absolutamente! El componente usa propiedades CSS personalizadas y parámetros JavaScript para fácil personalización de fuerza magnética y efectos.</p>
</div>
</div>
</div>
</div>