La librería de partículas más sed### 🎮 Sistema de Eventos Completo (Callbacks más responsivos que tu mejor amigo)
- onInit: Cuando FluxJS cobra vida (más emocionante que desempacar un regalo)
- onStart/onStop: Control total del ciclo de vida (tú tienes el poder)
- onResize: Responsive que realmente responde (adaptabilidad instantánea)
- onParticleClick: Click individual en partículas (cada una tiene su personalidad)
- onParticleHover: Hover con efectos dinámicos (interacción que seduce)
- onViewportEnter/Exit: Eventos de visibilidad más precisos que tu GPS
- onClick del mouse: Callbacks personalizados para interacción máximal internet. Sí, has leído bien: seduce a tus visitantes con efectos visuales que los harán suspirar "¿cómo diablos hiciste esto?". Más adictiva que el scroll infinito y más irresistible que los memes de gatos. Con más de 100 opciones de personalización porque, seamos honestos, te gusta tener todo bajo control... 😏
- 🔋 Optimización Inteligente de Batería: Más consciente que tu mejor amigo cuando se trata de no agotarte: detecta automáticamente el nivel de batería y ajusta el rendimiento para mantenerte funcionando toda la noche 😉
- 👁️ Lazy Loading con Viewport: Solo se activa cuando alguien está mirando (como tú en una fiesta): inicia las animaciones únicamente cuando el elemento es visible en pantalla
- 🎭 Multi-Touch Avanzado: Soporte completo para múltiples toques porque sabemos que tus usuarios tienen manos ágiles y no van a contenerse
- 🧠 IA de Rendimiento: Sistema tan adaptativo que hace que Siri parezca tímida: ajusta automáticamente la calidad según el dispositivo (incluso funciona en esa reliquia tecnológica que aún guardas)
-
♿ Accesibilidad Nativa: Más respetuoso que un canadiense: honra las preferencias del sistema como
prefers-reduced-motion
porque la elegancia también es cuestión de buenos modales - 🔧 Auto-Diagnóstico: Sistema tan inteligente que detecta y soluciona problemas antes de que te des cuenta (ojalá las relaciones funcionaran así)
- Colores simples: Para cuando quieres algo clásico pero con clase
- Gradientes: Porque la vida en monocromo es cosa del pasado
- Arcoíris animado: Para cuando tu lado más juguetón toma las riendas del diseño
- Paletas aleatorias: Déjalo al destino (pero con buen gusto garantizado)
- Gravedad: Configurable en 4 direcciones porque Newton aprobaría este nivel de rebeldía
- Viento: Fuerza y dirección personalizables (efectos atmosféricos sin la factura de electricidad)
- Fricción: Simulación de resistencia del aire más realista que tus expectativas de lunes por la mañana
- Rebotes: Factor de rebote configurable para cuando necesitas que las cosas regresen con más energía
- Turbulencia: Movimiento caótico tan realista que hace que el tráfico parezca predecible
- Atracción/Repulsión: Fuerzas configurables para crear esa tensión visual que todos necesitamos
- Magnetismo: Atracción instantánea (más efectiva que cualquier línea de ligue)
- Trail del mouse: Rastro visual con efectos de glow más brillante que tu sonrisa después del primer café
- Eventos personalizados: onClick, onHover callbacks porque la personalización es tu segunda naturaleza
- Detección de partículas: Click en partículas individuales (cada una merece su momento de gloria)
- Sparkles: Partículas brillantes que siguen al cursor como si fueras una celebridad
- Multi-touch avanzado: Soporte completo para pantallas táctiles (porque tus dedos merecen respeto)
- Configuración táctil: Distancias y fuerzas optimizadas para móviles (el tamaño importa, pero la precisión más)
- Cache de distancias: Optimización de cálculos que haría llorar de felicidad a cualquier matemático
- Trail con glow: Efectos visuales tan seductores que hipnotizan
- Configuración independiente táctil: Diferentes configuraciones para touch vs mouse (porque no todos los dedos son iguales)
- Glow: Efecto de brillo configurable más radiante que tu ego después de un código perfecto
- Sombras: Sombras con desplazamiento y desenfoque para ese drama visual que necesitas
- Twinkle: Efecto de centelleo porque todo merece su momento de estrella
- Pulse: Pulsación de tamaño más hipnótica que el latido de tu corazón en una cita
- Flicker: Parpadeo de opacidad más sutil que un guiño coqueto
- FadeIn: Aparición gradual más suave que la transición de soltero a comprometido
- Círculos: La forma clásica que nunca decepciona
- Cuadrados: Para los que prefieren las cosas claras y definidas
- Triángulos: Geometría básica pero con personalidad
- Estrellas: Configurables con cualquier número de puntas (porque la perfección tiene muchas formas)
- Corazones: Para cuando tu web necesita más amor del que está recibiendo
- Polígonos: Lados configurables porque ¿por qué conformarse con lo convencional?
- Formas custom: Función de dibujo personalizada para los artistas más rebeldes
- Rotación continua: Porque todo se ve mejor en movimiento
- Distribución de tamaño: Uniforme, gaussiana o exponencial (matemáticamente seductora)
- Float: Movimiento libre como tu espíritu en fin de semana
- Bounce: Rebotes en bordes más energéticos que tú con tu playlist favorita
- Spiral: Movimiento espiral tan hipnótico que te hace olvidar la hora
- Wave: Ondas sinusoidales más relajantes que un masaje
- Orbit: Órbitas circulares más precisas que tus planes de vida
- Direcciones: Up, down, left, right, random (como tus decisiones amorosas)
- Conexiones animadas: Líneas punteadas en movimiento
- Conexiones curvas: Líneas no rectas
- Límite de conexiones: Máximo por partícula
- Colores independientes: Color separado de partículas
- Grosor configurable: Ancho de líneas
- Breakpoints personalizables: Mobile, tablet, desktop
- Ajuste automático: Número de partículas según pantalla
- Escalado del contenedor: Adaptación a contenedores
- Detección de dispositivo: Identifica automáticamente el tipo de dispositivo
- Configuración por dispositivo: Diferentes ajustes para móvil, tablet y escritorio
- Simplificación automática: Desactiva efectos pesados en dispositivos móviles
- Control de FPS: Límite de cuadros por segundo configurable (para que no se maree ni tu abuela)
- Pausa automática: Al perder foco de ventana (ahorra batería y tu dignidad)
- Calidad adaptativa: Ajuste automático de calidad según el rendimiento (más inteligente que tu autocorrector)
- Optimización de conexiones: Algoritmos espaciales (Spatial Grid) para detección tan eficiente que da envidia
- 🔋 Detección de batería: Monitorea el nivel de batería y reduce automáticamente partículas cuando < 20% (más cuidadoso que tu mamá)
- Object Pooling: Reutilización de objetos para el trail del mouse (cero desperdicios, máximo glamour)
- Cache inteligente: Sistema de cache para colores, distancias y gradientes (memoria fotográfica digital)
- WebGL automático: Detección y uso automático de aceleración GPU cuando está disponible (aprovecha cada pixel)
- Hardware acceleration: Transform3D y backface-visibility para móviles (velocidad que impresiona)
- Culling: Solo renderiza partículas visibles en pantalla (eficiencia nivel ninja)
- Detección inteligente de dispositivos: Detecta automáticamente móviles, tablets y escritorio (más certero que tu intuición)
- Multi-touch: Soporte para múltiples toques simultáneos (hasta 10 dedos trabajando en armonía)
- Optimización táctil: Distancias y fuerzas ajustadas para pantallas táctiles (cada toque cuenta)
- Hardware acceleration: Uso de transform3D y backface-visibility para rendimiento que impresiona
- Gestión de memoria: Límites automáticos de partículas en dispositivos móviles (cuidamos tu RAM como oro)
-
Preferencias de accesibilidad: Respeta
prefers-reduced-motion
del sistema (elegancia inclusiva) - Optimización de batería: Monitoreo automático y ajuste de rendimiento (tu batería nos lo agradecerá)
- Responsive automático: Ajuste de partículas según breakpoints configurables (adaptabilidad nivel camaleón)
- Intersection Observer: Inicia las animaciones solo cuando el elemento es visible (eficiencia que enamora)
- Viewport threshold: Configurable porcentaje de visibilidad para activar (por defecto 10%, pero tú decides)
- Root margin: Configuración de margen para empezar antes de ser visible (por defecto 50px de anticipación)
- Lazy loading inteligente: Ahorro de recursos en elementos fuera de pantalla (minimalismo digital)
-
Eventos de viewport: Callbacks
onViewportEnter
yonViewportExit
(control total de la experiencia) - Observación flexible: Opción de observar solo una vez o continuamente (tu eliges el nivel de atención)
- Auto-limpieza: Sistema que destruye demos cuando salen del viewport (limpieza automática nivel Marie Kondo)
- Callbacks completos: onInit, onStart, onStop, onResize, onParticleClick, onParticleHover
- Eventos de viewport: onViewportEnter, onViewportExit
- Diagnóstico automático: Sistema de diagnóstico para detectar problemas
- Manejo de errores: Recuperación automática de errores de inicialización
- onInit: Cuando FluxJS cobra vida (como Pinocho pero mejor)
- onStart/onStop: Control total del ciclo de vida
- onResize: Responsive que realmente responde
- onParticleClick: Click individual en partículas (cada una es especial)
- onParticleHover: Hover con efectos dinámicos
- onViewportEnter/Exit: Eventos de visibilidad inteligentes
- onClick del mouse: Callbacks personalizados para interacción
<script src="https://unpkg.com/@pablotheblink/fluxjs@1.0.5/flux.js"></script>
<script src="flux.js"></script>
npm install @pablotheblink/fluxjs
// CommonJS
const { createFlux } = require("@pablotheblink/fluxjs");
// ES6 Modules / TypeScript
import { createFlux } from "@pablotheblink/fluxjs";
// Fondo simple
const flux = new FluxJS();
// Con configuración básica
const flux = new FluxJS({
container: document.getElementById("mi-contenedor"),
count: 100,
color: { type: "rainbow" },
});
// Estrellas brillantes
const stars = createFlux.stars(document.body, {
count: 200,
effects: { twinkle: true, glow: true },
});
// Red neural interactiva
const network = createFlux.network(document.body, {
mouse: { magnetism: true },
connections: { animated: true },
});
// Burbujas con física
const bubbles = createFlux.bubbles(document.body, {
physics: { gravity: 0.1, wind: 0.05 },
});
// Galaxia en órbita
const galaxy = createFlux.galaxy(document.body, {
count: 300,
animation: { orbit: { radius: 250 } },
});
const flux = new FluxJS({
color: {
type: "gradient",
gradient: ["#FF6B6B", "#4ECDC4", "#45B7D1", "#96CEB4"],
},
});
// Arcoíris dinámico
const rainbow = new FluxJS({
color: {
type: "rainbow",
rainbowSpeed: 0.03,
},
});
// Paleta personalizada
const custom = new FluxJS({
color: {
type: "random",
randomPalette: ["#FF0000", "#00FF00", "#0000FF", "#FFFF00"],
},
});
const physics = new FluxJS({
physics: {
gravity: 0.15,
gravityDirection: "down",
friction: 0.02,
bounce: 0.8,
wind: 0.05,
windDirection: Math.PI / 4,
},
animation: { type: "bounce" },
});
const magical = new FluxJS({
effects: {
glow: true,
glowColor: "#FFD700",
glowSize: 20,
twinkle: true,
shadow: true,
},
size: {
pulse: true,
pulseIntensity: 0.8,
},
opacity: {
flicker: true,
fadeIn: true,
},
});
const hearts = new FluxJS({
shape: {
type: "heart",
rotation: true,
rotationSpeed: 0.02,
},
color: { type: "gradient", gradient: ["#FF69B4", "#DC143C"] },
});
// Forma completamente personalizada
const custom = new FluxJS({
shape: {
type: "custom",
customPath: (ctx, particle) => {
ctx.beginPath();
ctx.arc(particle.x, particle.y, particle.size, 0, Math.PI * 2);
ctx.moveTo(particle.x + particle.size, particle.y);
ctx.arc(particle.x, particle.y, particle.size * 0.5, 0, Math.PI * 2);
ctx.fill();
},
},
});
const interactive = new FluxJS({
mouse: {
interact: true,
distance: 200,
attraction: 0.1,
magnetism: true,
trail: true,
trailLength: 20,
onClick: (event, flux) => {
// Crear explosión en el punto de click
flux.explode(event.clientX, event.clientY, 10, 200);
},
},
events: {
onParticleClick: (particle, flux) => {
// Cambiar color de partícula clickeada
particle.size *= 2;
setTimeout(() => (particle.size /= 2), 1000);
},
},
});
flux.start(); // Iniciar animación
flux.stop(); // Detener animación
flux.destroy(); // Limpiar completamente
// Configuración dinámica
flux.updateConfig({ count: 200 });
flux.setColor("#ff0000");
flux.setAnimation("spiral");
flux.setPhysics({ gravity: 0.1 });
// Añadir partícula personalizada
flux.addParticle(x, y, {
size: 10,
color: "#ff0000",
vx: 2,
vy: -1,
});
// Efectos dinámicos
flux.explode(x, y, force, radius); // Explosión
flux.attract(x, y, force, radius); // Atracción
flux.removeParticle(index); // Eliminar partícula
// Utilidades
const particle = flux.getParticleAt(x, y);
const flux = new FluxJS({
events: {
onInit: (flux) => console.log("Inicializado"),
onStart: (flux) => console.log("Iniciado"),
onStop: (flux) => console.log("Detenido"),
onResize: (flux) => console.log("Redimensionado"),
onParticleClick: (particle, flux) => console.log("Partícula clickeada"),
onParticleHover: (particle, flux) => console.log("Mouse sobre partícula"),
},
});
- stars: Campo de estrellas con efecto twinkle
- network: Red neural animada estilo Matrix
- bubbles: Burbujas con física realista
- spiral: Movimiento en espiral hipnótico
- galaxy: Simulación de galaxia en órbita
- matrix: Efecto Matrix con caída verde
- hearts: Corazones flotantes románticos
- aurora: Efectos de aurora boreal
- cosmic: Espacio profundo con gradientes morados
const flux = new FluxJS({
responsive: {
enabled: true,
breakpoints: {
mobile: { width: 768, particles: 0.3 },
tablet: { width: 1024, particles: 0.6 },
desktop: { width: 1920, particles: 1.0 },
},
},
});
- Usa menos partículas en móviles: El sistema responsive ya lo hace automáticamente (somos así de considerados)
-
Limita las conexiones: Usa
maxConnections
para optimizar (menos conexiones, más seducción) -
Controla el FPS: Usa
performance.maxFPS
para dispositivos que necesitan un respiro -
Pausa en blur:
performance.pauseOnBlur
ahorra batería (y la cordura de tus usuarios) -
Usa Spatial Grid:
optimizeConnections: true
para manejar miles de partículas como un profesional - WebGL automático: Deja que FluxJS detecte y use GPU cuando esté disponible (acelera tu corazón y tu web)
- Object Pooling: El trail reutiliza objetos automáticamente (cero desperdicios, máximo estilo)
- Cache inteligente: Los colores y distancias se cachean automáticamente (memoria que funciona mejor que la tuya)
Para ver todas las opciones disponibles, consulta CONFIGURATION.md que incluye más de 100 opciones organizadas por categorías.
¡Las contribuciones son más bienvenidas que el Wi-Fi gratis en un café! FluxJS es un proyecto de código abierto que se alimenta de la creatividad y el talento de desarrolladores como tú (sí, estamos hablando contigo, genio).
- 🐛 Reportar bugs: Crea un issue describiendo el problema (mientras más detalles, más te amaremos)
- 💡 Proponer features: Sugiere nuevas funcionalidades (no tengas miedo de ser ambicioso)
- 📝 Mejorar documentación: Ayuda con ejemplos y guías (la documentación clara es pura seducción)
- 🔧 Contribuir código: Implementa fixes y nuevas características (tu código puede cambiar el mundo web)
- 🎨 Crear ejemplos: Desarrolla demos y casos de uso (la creatividad no conoce límites)
- 🧪 Testing: Ayuda con pruebas y validaciones (los bugs no tendrán escapatoria)
- Fork del repositorio (como cuando copias la tarea, pero aquí está permitido)
-
Clona tu fork:
git clone https://github.com/tu-usuario/FluxJS.git
-
Crea una rama:
git checkout -b feature/nueva-caracteristica
- Implementa tus cambios (aquí es donde brillas como la estrella que eres)
- Testea tu código (porque nadie quiere bugs en producción, ¿verdad?)
-
Commit:
git commit -m "feat: descripción irresistible del cambio"
-
Push:
git push origin feature/nueva-caracteristica
- Crea un Pull Request (y espera la magia colaborativa)
- Usa camelCase para variables y funciones (como toda persona civilizada)
- Comenta código complejo (tu yo del futuro te adorará por esto)
- Mantén consistencia con el estilo existente (la armonía visual es irresistible)
- Incluye documentación para nuevos features (el conocimiento compartido es poder multiplicado)
Para más detalles, consulta CONTRIBUTING.md.
¡Gracias a todos los valientes desarrolladores que han contribuido a FluxJS! (Sin ustedes esto sería un monólogo muy solitario y considerablemente menos divertido)
MIT License - ve LICENSE para más detalles.