Diseñador Web y Asesor

¡Magia en tu Web! Cómo Añadir un Efecto de Chispas al Cursor en tu Sitio

¡Magia en tu Web! Cómo Añadir un Efecto de Chispas al Cursor en tu Sitio

Tabla de Contenido

¿Quieres que tu sitio web tenga un toque de magia y llame la atención de tus visitantes? Con este sencillo código JavaScript, puedes añadir un divertido y dinámico efecto de chispas que sigue el cursor del ratón por toda tu página. Es una forma sutil pero efectiva de mejorar la experiencia del usuario y hacer que tu sitio sea más interactivo.

¿Qué es este código y cómo funciona?

El código que nos has proporcionado es un script de JavaScript que crea un efecto visual de «chispas» o «estrellitas» flotantes que aparecen y se desvanecen al mover el cursor por la pantalla. Analicemos brevemente sus componentes clave:

  • var colour="random";: Esta línea define el color de las chispas. Puedes dejarlo en «random» para que cambien de color aleatoriamente, o asignarle un color específico como «red», «#f0f», o cualquier código hexadecimal.
  • var sparkles=50;: Controla la cantidad de chispas que se mostrarán en pantalla. Aumentar este número hará el efecto más denso, pero podría impactar ligeramente el rendimiento en sitios con mucho contenido o en dispositivos más antiguos.
  • Funciones de Creación y Actualización (createDiv, sparkle, update_star, update_tiny): Estas funciones son el cerebro del script. Se encargan de crear los elementos HTML (pequeños divs) que representan las chispas, posicionarlos en la pantalla y actualizar su tamaño y opacidad para simular el efecto de «brillo» y «desvanecimiento».
  • Eventos de Interacción (document.onmousemove, window.onscroll, window.onresize): El script captura los movimientos del ratón (onmousemove) para que las chispas sigan el cursor. También se adapta a los cambios de tamaño de la ventana y al desplazamiento de la página para asegurar que el efecto funcione correctamente en todas las situaciones.

¿Por qué añadir este efecto a tu web?

Aunque pueda parecer un detalle menor, un efecto como este puede tener varios beneficios:

  • Mayor Engagement: Un sitio web interactivo mantiene al usuario más tiempo y lo invita a explorar.
  • Diferenciación: Destácate de la competencia ofreciendo una experiencia de usuario única y memorable.
  • Atención al Detalle: Demuestra que te preocupas por los pequeños detalles que hacen que tu sitio sea especial.
  • ¡Simplemente Divertido!: A veces, un poco de diversión es todo lo que se necesita para dejar una buena impresión.

¿Cómo implementar el código en tu sitio web (usando Code Snippets)?

La forma más sencilla y recomendada para añadir este código a tu sitio de WordPress (o cualquier CMS que soporte snippets) es a través de un plugin como Code Snippets. Aquí te explicamos cómo:

  1. Instala y activa el plugin «Code Snippets» (si aún no lo tienes).
  2. Ve a «Snippets» > «Add New» en tu panel de WordPress.
  3. Asígnale un título descriptivo, como «Efecto Chispas Cursor».
  4. Copia y pega el código JavaScript completo en el área de código.
  5. En la sección «Scope» (Ámbito), selecciona «Run Everywhere» (Ejecutar en todas partes) o «Only run on front-end» (Solo ejecutar en el frontend) para que el efecto aparezca en todas las páginas de tu sitio visibles para los usuarios.
  6. Guarda los cambios y activa el snippet.

¡Y listo! Al recargar tu sitio, deberías ver las chispas siguiendo tu cursor.

<script type="text/javascript">
// <![CDATA[
var colour="random"; // in addition to "random" can be set to any valid colour eg "#f0f" or "red"
var sparkles=50;

/****************************
*  Tinkerbell Magic Sparkle *
*(c)2005-13 mf2fm web-design*
*  http://www.mf2fm.com/rv  *
* DON'T EDIT BELOW THIS BOX *
****************************/
var x=ox=400;
var y=oy=300;
var swide=800;
var shigh=600;
var sleft=sdown=0;
var tiny=new Array();
var star=new Array();
var starv=new Array();
var starx=new Array();
var stary=new Array();
var tinyx=new Array();
var tinyy=new Array();
var tinyv=new Array();

window.onload=function() { if (document.getElementById) {
  var i, rats, rlef, rdow;
  for (var i=0; i<sparkles; i++) {
    var rats=createDiv(3, 3);
    rats.style.visibility="hidden";
    rats.style.zIndex="999";
    document.body.appendChild(tiny[i]=rats);
    starv[i]=0;
    tinyv[i]=0;
    var rats=createDiv(5, 5);
    rats.style.backgroundColor="transparent";
    rats.style.visibility="hidden";
    rats.style.zIndex="999";
    var rlef=createDiv(1, 5);
    var rdow=createDiv(5, 1);
    rats.appendChild(rlef);
    rats.appendChild(rdow);
    rlef.style.top="2px";
    rlef.style.left="0px";
    rdow.style.top="0px";
    rdow.style.left="2px";
    document.body.appendChild(star[i]=rats);
  }
  set_width();
  sparkle();
}}

function sparkle() {
  var c;
  if (Math.abs(x-ox)>1 || Math.abs(y-oy)>1) {
    ox=x;
    oy=y;
    for (c=0; c<sparkles; c++) if (!starv[c]) {
      star[c].style.left=(starx[c]=x)+"px";
      star[c].style.top=(stary[c]=y+1)+"px";
      star[c].style.clip="rect(0px, 5px, 5px, 0px)";
      star[c].childNodes[0].style.backgroundColor=star[c].childNodes[1].style.backgroundColor=(colour=="random")?newColour():colour;
      star[c].style.visibility="visible";
      starv[c]=50;
      break;
    }
  }
  for (c=0; c<sparkles; c++) {
    if (starv[c]) update_star(c);
    if (tinyv[c]) update_tiny(c);
  }
  setTimeout("sparkle()", 40);
}

function update_star(i) {
  if (--starv[i]==25) star[i].style.clip="rect(1px, 4px, 4px, 1px)";
  if (starv[i]) {
    stary[i]+=1+Math.random()*3;
    starx[i]+=(i%5-2)/5;
    if (stary[i]<shigh+sdown) {
      star[i].style.top=stary[i]+"px";
      star[i].style.left=starx[i]+"px";
    }
    else {
      star[i].style.visibility="hidden";
      starv[i]=0;
      return;
    }
  }
  else {
    tinyv[i]=50;
    tiny[i].style.top=(tinyy[i]=stary[i])+"px";
    tiny[i].style.left=(tinyx[i]=starx[i])+"px";
    tiny[i].style.width="2px";
    tiny[i].style.height="2px";
    tiny[i].style.backgroundColor=star[i].childNodes[0].style.backgroundColor;
    star[i].style.visibility="hidden";
    tiny[i].style.visibility="visible"
  }
}

function update_tiny(i) {
  if (--tinyv[i]==25) {
    tiny[i].style.width="1px";
    tiny[i].style.height="1px";
  }
  if (tinyv[i]) {
    tinyy[i]+=1+Math.random()*3;
    tinyx[i]+=(i%5-2)/5;
    if (tinyy[i]<shigh+sdown) {
      tiny[i].style.top=tinyy[i]+"px";
      tiny[i].style.left=tinyx[i]+"px";
    }
    else {
      tiny[i].style.visibility="hidden";
      tinyv[i]=0;
      return;
    }
  }
  else tiny[i].style.visibility="hidden";
}

document.onmousemove=mouse;
function mouse(e) {
  if (e) {
    y=e.pageY;
    x=e.pageX;
  }
  else {
    set_scroll();
    y=event.y+sdown;
    x=event.x+sleft;
  }
}

window.onscroll=set_scroll;
function set_scroll() {
  if (typeof(self.pageYOffset)=='number') {
    sdown=self.pageYOffset;
    sleft=self.pageXOffset;
  }
  else if (document.body && (document.body.scrollTop || document.body.scrollLeft)) {
    sdown=document.body.scrollTop;
    sleft=document.body.scrollLeft;
  }
  else if (document.documentElement && (document.documentElement.scrollTop || document.documentElement.scrollLeft)) {
    sleft=document.documentElement.scrollLeft;
    sdown=document.documentElement.scrollTop;
  }
  else {
    sdown=0;
    sleft=0;
  }
}

window.onresize=set_width;
function set_width() {
  var sw_min=999999;
  var sh_min=999999;
  if (document.documentElement && document.documentElement.clientWidth) {
    if (document.documentElement.clientWidth>0) sw_min=document.documentElement.clientWidth;
    if (document.documentElement.clientHeight>0) sh_min=document.documentElement.clientHeight;
  }
  if (typeof(self.innerWidth)=='number' && self.innerWidth) {
    if (self.innerWidth>0 && self.innerWidth<sw_min) sw_min=self.innerWidth;
    if (self.innerHeight>0 && self.innerHeight<sh_min) sh_min=self.innerHeight;
  }
  if (document.body.clientWidth) {
    if (document.body.clientWidth>0 && document.body.clientWidth<sw_min) sw_min=document.body.clientWidth;
    if (document.body.clientHeight>0 && document.body.clientHeight<sh_min) sh_min=document.body.clientHeight;
  }
  if (sw_min==999999 || sh_min==999999) {
    sw_min=800;
    sh_min=600;
  }
  swide=sw_min;
  shigh=sh_min;
}

function createDiv(height, width) {
  var div=document.createElement("div");
  div.style.position="absolute";
  div.style.height=height+"px";
  div.style.width=width+"px";
  div.style.overflow="hidden";
  return (div);
}

function newColour() {
  var c=new Array();
  c[0]=255;
  c[1]=Math.floor(Math.random()*256);
  c[2]=Math.floor(Math.random()*(256-c[1]/2));
  c.sort(function(){return (0.5 - Math.random());});
  return ("rgb("+c[0]+", "+c[1]+", "+c[2]+")");
}
// ]]>
</script>

Consideraciones SEO y de Rendimiento

Si bien este efecto es visualmente atractivo, es importante tener en cuenta algunas consideraciones:

  • Impacto en el rendimiento: Para la mayoría de los sitios modernos, este script es ligero y no debería afectar significativamente la velocidad de carga. Sin embargo, si notas alguna lentitud, puedes reducir el valor de sparkles o probar con un script más simple.
  • Experiencia de Usuario: Asegúrate de que el efecto no sea intrusivo ni molesto para el usuario. El código proporcionado es bastante sutil, pero siempre es bueno obtener feedback.
  • Compatibilidad: Este script está diseñado para funcionar en la mayoría de los navegadores modernos. No obstante, siempre es buena práctica realizar pruebas en diferentes navegadores y dispositivos.

Añadir este tipo de detalles puede transformar tu sitio web de funcional a fascinante. ¿Te animas a darle un toque mágico a tu web?

Fuente: TINKERBELL MOUSE EFFECT