1 estrella en GitHub = 1 componente nuevo.

Dar una estrella
Tipografía typographycyberpunkdecodeglitchmatrix

Hacker Decode Text

Efecto de decodificación de texto que pasa de caracteres aleatorios al texto final.

Vista Previa en Vivo

CYBERNETIC PROTOCOL ONLINE

Uso

Copia y pega este código directamente en tu página de Astro:

astro
---
import { HackerDecodeText } from 'astro-component-kit';
---

<HackerDecodeText text="CYBERNETIC_INTERFACE_INITIALIZED" speed={40} />
--- import { HackerDecodeText } from 'astro-component-kit'; --- <HackerDecodeText text="CYBERNETIC_INTERFACE_INITIALIZED" speed={40} />

Instalación Manual

Si no estás usando el paquete npm, crea un archivo nuevo y pega el siguiente código: src/components/lib/HackerDecodeText.astro:

astro
---
/**
 * HackerDecodeText — Cyberpunk Matrix-style randomized character deciphering effect on hover.
 * 
 * @param {string} text - Final decoded text string. Default is 'CYBERNETIC SYSTEM READY'.
 * @param {string} tag - HTML heading or paragraph tag. Default is 'h3'.
 * @param {string} className - Optional CSS class names.
 */
interface Props {
  text?: string;
  tag?: 'h1' | 'h2' | 'h3' | 'h4' | 'p' | 'span';
  className?: string;
}

const {
  text = 'CYBERNETIC PROTOCOL ONLINE',
  tag: Tag = 'h3',
  className = '',
} = Astro.props;
---

<Tag
  class:list={['hacker-text', className]}
  data-hacker-text={text}
  title="Hover to decode"
>
  {text}
</Tag>

<style>
  .hacker-text {
    font-family: var(--font-mono, 'JetBrains Mono', monospace);
    font-size: clamp(1.2rem, 3vw, 2rem);
    font-weight: 800;
    color: var(--c-primary-light, #d4a017);
    letter-spacing: 0.08em;
    cursor: default;
    user-select: none;
    transition: text-shadow 0.2s ease;
  }

  .hacker-text:hover {
    text-shadow: 0 0 12px rgba(212, 160, 23, 0.7);
  }
</style>

<script>
  const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{}|;:,.<>?';

  function setupHackerText() {
    document.querySelectorAll('[data-hacker-text]').forEach((el) => {
      if (el.getAttribute('data-hacker-init')) return;
      el.setAttribute('data-hacker-init', 'true');

      const original = el.getAttribute('data-hacker-text') || el.textContent || '';
      let interval: any = null;

      el.addEventListener('pointerenter', () => {
        let iteration = 0;
        clearInterval(interval);

        interval = setInterval(() => {
          el.textContent = original
            .split('')
            .map((char, index) => {
              if (char === ' ') return ' ';
              if (index < iteration) {
                return original[index];
              }
              return chars[Math.floor(Math.random() * chars.length)];
            })
            .join('');

          if (iteration >= original.length) {
            clearInterval(interval);
          }
          iteration += 1 / 2;
        }, 30);
      });
    });
  }

  setupHackerText();
  document.addEventListener('astro:page-load', setupHackerText);
</script>
--- /** * HackerDecodeText — Cyberpunk Matrix-style randomized character deciphering effect on hover. * * @param {string} text - Final decoded text string. Default is 'CYBERNETIC SYSTEM READY'. * @param {string} tag - HTML heading or paragraph tag. Default is 'h3'. * @param {string} className - Optional CSS class names. */ interface Props { text?: string; tag?: 'h1' | 'h2' | 'h3' | 'h4' | 'p' | 'span'; className?: string; } const { text = 'CYBERNETIC PROTOCOL ONLINE', tag: Tag = 'h3', className = '', } = Astro.props; --- <Tag class:list={['hacker-text', className]} data-hacker-text={text} title="Hover to decode" > {text} </Tag> <style> .hacker-text { font-family: var(--font-mono, 'JetBrains Mono', monospace); font-size: clamp(1.2rem, 3vw, 2rem); font-weight: 800; color: var(--c-primary-light, #d4a017); letter-spacing: 0.08em; cursor: default; user-select: none; transition: text-shadow 0.2s ease; } .hacker-text:hover { text-shadow: 0 0 12px rgba(212, 160, 23, 0.7); } </style> <script> const chars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789!@#$%^&*()_+-=[]{}|;:,.<>?'; function setupHackerText() { document.querySelectorAll('[data-hacker-text]').forEach((el) => { if (el.getAttribute('data-hacker-init')) return; el.setAttribute('data-hacker-init', 'true'); const original = el.getAttribute('data-hacker-text') || el.textContent || ''; let interval: any = null; el.addEventListener('pointerenter', () => { let iteration = 0; clearInterval(interval); interval = setInterval(() => { el.textContent = original .split('') .map((char, index) => { if (char === ' ') return ' '; if (index < iteration) { return original[index]; } return chars[Math.floor(Math.random() * chars.length)]; }) .join(''); if (iteration >= original.length) { clearInterval(interval); } iteration += 1 / 2; }, 30); }); }); } setupHackerText(); document.addEventListener('astro:page-load', setupHackerText); </script>

Información Rápida

Categoría
Tipografía
Nombre de archivo
HackerDecodeText.astro
Dependencias
Ninguna — Astro nativo + CSS puro
Etiquetas
typographycyberpunkdecodeglitchmatrix