К основному содержанию
скилл CX Codex

staggered-word-reveal — скилл для Claude Code

Создаёт пословное появление короткого текста при прокрутке. Подходит для заголовков, подзаголовков, цитат и вступительных блоков.

Установить в Claude Code · Через Skills CLI (Vercel) Все способы и платформы ↓
npx skills add MengTo/Skills --skill staggered-word-reveal -a claude-code
Открыть на GitHub

Что делает staggered-word-reveal

Скилл задаёт анимацию, в которой слова по очереди появляются при попадании текста в область просмотра. Для каждого слова используются прозрачность и вертикальный сдвиг, а задержка между словами составляет 0.06s–0.08s.

Скрипт делит текст на элементы без innerHTML, сохраняет пробелы и передаёт исходную фразу скринридерам через aria-label. IntersectionObserver запускает эффект один раз и затем прекращает наблюдение. При отключённом JavaScript текст остаётся видимым, а при уменьшении движения показывается без анимации.

Для React, Vue и Svelte разделение нужно запускать после монтирования и очищать наблюдатель при смене маршрута. Это плохой выбор для длинных абзацев, а также текста со ссылками, кнопками или важной встроенной разметкой.

Какие задачи решает

  • раскрыть слова в заголовке по очереди
  • запустить появление текста при прокрутке
  • сохранить читаемость текста без JavaScript
  • показать статичный текст при уменьшении движения

Примеры запросов агенту

  • Сделай для h1 с [data-word-reveal] пословное появление при прокрутке.
  • Добавь к короткой цитате анимацию слов через IntersectionObserver без повторного запуска.
  • Оформи текстовый блок с классами word-reveal и word-reveal__word, учитывая уменьшение движения.

Как установить staggered-word-reveal

1Через Skills CLI (Vercel)

npx skills add MengTo/Skills --skill staggered-word-reveal -a claude-code

2Вручную: положить файлы

~/.claude/skills/staggered-word-reveal/SKILL.md

Папка скилла целиком; для одного проекта — .claude/skills/staggered-word-reveal/

По шагам, с командами для каждой платформы: Как установить скилл в Claude Code: пять способов

Вопросы о staggered-word-reveal

Как установить staggered-word-reveal в Claude Code?

Дважды выполните npx skills add MengTo/Skills --skill staggered-word-reveal -a claude-code. Файл скилла будет доступен по пути ~/.claude/skills/staggered-word-reveal/SKILL.md.

Что делает staggered-word-reveal?

Скилл помогает добавить к короткому тексту эффект появления слов с подъёмом снизу. Эффект срабатывает при входе блока в область просмотра и не повторяется при дальнейшей прокрутке.

Что увидят пользователи с уменьшением движения?

При настройке prefers-reduced-motion: reduce слова остаются видимыми без переходов и смещения. Такой же статичный вариант используется, если браузер не поддерживает IntersectionObserver.

Исходный текст

SKILL.md · MIT
---
name: staggered-word-reveal
description: Create subtle editorial word-by-word text reveal animations where each word fades and rises into place once it enters the viewport. Use for premium portfolio headlines, hero copy, section intros, and short marketing text that needs a cinematic staggered reveal with IntersectionObserver or in-view detection.
---

# Staggered Word Reveal

## Use When
- A short headline, intro, or pull quote should reveal word by word.
- The motion should feel editorial, premium, and restrained.
- The reveal should trigger only once when the text enters the viewport.
- The project does not need heavy GSAP SplitText behavior.

## Motion Defaults
- Initial state: `opacity: 0`, `transform: translateY(20px)`.
- Final state: `opacity: 1`, `transform: translateY(0)`.
- Duration: `0.8s`.
- Ease: `cubic-bezier(0.16, 1, 0.3, 1)`.
- Stagger: `0.06s` to `0.08s` per word. Default to `0.07s`.
- Trigger: start around `20%` visible, with a slight lower viewport bias.
- Replay: once only.

## HTML

```html
<h1 class="word-reveal" data-word-reveal>
  Build interfaces that feel calm, cinematic, and alive.
</h1>
```

## CSS

Keep no-JS content visible. Hide only after JavaScript is active and before the text has been split.

```css
.word-reveal {
  visibility: visible;
}

html.js .word-reveal[data-word-reveal]:not(.is-ready) {
  opacity: 0;
}

.word-reveal__word {
  display: inline-block;
  opacity: 0;
  transform: translate3d(0, 20px, 0);
  transition:
    opacity 0.8s cubic-bezier(0.16, 1, 0.3, 1),
    transform 0.8s cubic-bezier(0.16, 1, 0.3, 1);
  transition-delay: calc(var(--word-index) * 0.07s);
  will-change: opacity, transform;
}

.word-reveal.is-visible .word-reveal__word {
  opacity: 1;
  transform: translate3d(0, 0, 0);
}

@media (prefers-reduced-motion: reduce) {
  html.js .word-reveal[data-word-reveal]:not(.is-ready),
  .word-reveal__word {
    opacity: 1;
    transform: none;
    transition: none;
  }
}
```

## JavaScript

This splitter preserves spaces, avoids `innerHTML`, exposes the original sentence to screen readers, and unobserves after the first reveal.

```js
document.documentElement.classList.add("js");

function splitWordReveal(element) {
  if (element.dataset.wordRevealReady === "true") return;

  const text = element.textContent || "";
  const parts = text.split(/(\s+)/);
  let wordIndex = 0;

  element.textContent = "";
  element.setAttribute("aria-label", text.trim());

  parts.forEach((part) => {
    if (!part.trim()) {
      element.appendChild(document.createTextNode(part));
      return;
    }

    const word = document.createElement("span");
    word.className = "word-reveal__word";
    word.setAttribute("aria-hidden", "true");
    word.style.setProperty("--word-index", wordIndex);
    word.textContent = part;

    element.appendChild(word);
    wordIndex += 1;
  });

  element.dataset.wordRevealReady = "true";
  element.classList.add("is-ready");
}

function initWordReveals(selector = "[data-word-reveal]") {
  const elements = Array.from(document.querySelectorAll(selector));
  const reduceMotion = window.matchMedia("(prefers-reduced-motion: reduce)").matches;

  if (reduceMotion || !("IntersectionObserver" in window)) {
    elements.forEach((element) => {
      element.classList.add("is-ready", "is-visible");
    });
    return;
  }

  const observer = new IntersectionObserver(
    (entries, io) => {
      entries.forEach((entry) => {
        if (!entry.isIntersecting) return;

        entry.target.classList.add("is-visible");
        io.unobserve(entry.target);
      });
    },
    {
      threshold: 0.2,
      rootMargin: "0px 0px -10% 0px",
    }
  );

  elements.forEach((element) => {
    splitWordReveal(element);
    observer.observe(element);
  });
}

document.addEventListener("DOMContentLoaded", () => {
  initWordReveals();
});
```

## Framework Notes
- React/Vue/Svelte: run the splitter after mount, then clean up observer instances on route changes.
- Framer Motion: keep the same tokens: `y: 20`, `opacity: 0`, duration `0.8`, ease `[0.16, 1, 0.3, 1]`, stagger `0.06` to `0.08`, `once: true`.
- GSAP: use `fromTo(words, { y: 20, opacity: 0 }, { y: 0, opacity: 1, duration: 0.8, ease: "expo.out", stagger: 0.07 })`.

## Taste Rules
- Use on short text: headlines, subheads, labels, and quotes. Avoid long paragraphs.
- Stagger words, not letters, for a calmer premium feel.
- Keep the offset subtle. Do not add bounce, rotation, or large blur.
- Animate `transform` and `opacity` only.
- Do not split text containing links, buttons, or meaningful inline markup.
- If wrapping is important, initialize after web fonts are ready.

## Quick Checks
- Text is visible when JavaScript is disabled.
- Words begin at `translateY(20px)` and `opacity: 0`.
- Each word reveals once with a `0.06s` to `0.08s` delay.
- Repeated scrolling does not replay the animation.
- Reduced-motion users see static readable text.

© MengTo · MIT · MengTo/Skills

Похожие скиллы

Всё по теме «Фронтенд и UI» →
scroll-animations dylantarre Скилл для анимаций, привязанных к прокрутке: появления блоков, параллакс, липкие шапки, индикаторы прогресса. Пригодится, когда страница должна реагировать на скролл, а не просто листаться. CX Codex +1 1 100установок gesture-responses dylantarre Скилл для анимации отклика на тап, свайп и перетаскивание: задаёт тайминги, кривые и паттерны для CSS и JS. CX Codex +1 533установок scroll-reveal-libraries freshtechbro Подключает лёгкие CSS-анимации появления элементов при прокрутке через библиотеку AOS. Помогает верстать лендинги и блоги без тяжеловесного JS-кода. CX Codex +1 2 400установок import-on-visibility patterns.dev Скилл учит агента откладывать загрузку компонентов и картинок до момента, когда пользователь доскроллит до них. Пригодится, если первый экран грузится слишком долго. CX Codex +1 1 500установок view-transitions patterns.dev Учит агента работать с View Transitions API: переходы между страницами и состояниями интерфейса браузер анимирует сам. CX Codex +1 678установок milestone-reveal charlie947 Собирает 12-секундный зацикленный ролик, где тысячи точек слетаются в вашу реальную цифру подписчиков, выручки или клиентов. CX Codex +1 1 400установок

Из того же набора148

css-border-gradient Добавляет в веб-интерфейс аккуратные градиентные рамки через CSS или Tailwind. Пригодится карточкам цен, модальным окнам и кнопкам, которым нужна сдержанная подсветка контура. CX Codex +1 1 500установок scroll-scrubbed-visual-sequence Собирает обратимые визуальные сцены, управляемые прокруткой: от сборки продукта до смены состояний интерфейса. Пригодится для интерактивных hero-блоков и диаграмм. CX Codex +1 1 500установок unsplash-asset-images Скилл подбирает фотографии Unsplash под аватары, хедшоты, фоны и обои и сразу называет нужные пропорции и разрешения. CX Codex +1 1 600установок scroll-world-storytelling Скилл превращает статьи, кейсы и продуктовые истории в кинематографичные скролл-лендинги. Пригодится, когда вместо скучных блоков нужен связный визуальный мир. CX Codex +1 1 600установок editorial-portfolio-chapters Скилл для сайтов креативных студий, агентств, фотографов и художников: работа ведёт рассказ, а не блок «о нас». Пригодится, когда портфолио нужно собрать как серию журнальных глав. CX Codex +1 1 400установок performance-profiling Помогает находить зависания и утечки памяти в приложениях под платформы Apple. Направляет агента по инструментам Instruments и телеметрии MetricKit. CX Codex +1 1 400установок audit-verify-explain-grade-5 Скилл заставляет агента проверить работу по фактам, а потом объяснить результат простыми словами. Пригодится, когда нужно разобрать чужой фикс или отчёт о тестах. CX Codex +1 1 400установок product-proof-saas Скилл для лендингов SaaS и ИИ-продуктов, где главное доказательство — реальный интерфейс или размеченный демо-сценарий, а не атмосферные картинки. CX Codex +1 1 400установок

Спонсоры проекта

Компании, которые помогают держать аналитику открытой