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

anime-js · mindrally — скилл для Claude Code: анимации на Anime.js

Скилл задаёт агенту правила работы с Anime.js: таймлайны, stagger, SVG-морфинг и производительность. Пригодится, когда анимации в проекте пишет ИИ.

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

Что делает anime-js

Скилл превращает агента в человека, который знает Anime.js. Внутри — готовые шаблоны: базовая анимация через anime(), таймлайны с перехлёстом по времени, stagger с раскладкой по сетке, морфинг SVG-путей и рисование линий через strokeDashoffset. Отдельный блок про React: анимация запускается в useEffect, а на размонтировании вызывается pause().

Про производительность сказано прямо: двигайте translateX, scale и rotate, а не left, top и width — последние вызывают пересчёт раскладки. Для частых обновлений вроде слежения за курсором есть Animatable. Ещё в скилле есть мост к Web Animations API через wapiAnimate и проверка prefers-reduced-motion, чтобы анимация отключалась у тех, кто просил уменьшить движение.

Перед установкой учтите: скилл предполагает, что в проекте стоит сама библиотека — npm install animejs. Без неё советы бесполезны. Исходный файл обрезан на разделе с лучшими практиками, так что полного списка рекомендаций там нет.

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

  • написать таймлайн из нескольких шагов с перехлёстом по времени
  • сделать каскадное появление элементов сетки через stagger
  • нарисовать SVG-линию от начала к концу
  • запустить анимацию в React-компоненте и убрать её при размонтировании
  • отключить движение для пользователей с prefers-reduced-motion

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

  • сделай анимацию появления карточек через anime.js со stagger от центра
  • перепиши этот таймлайн так, чтобы блоки шли с перехлёстом 500 мс
  • анимируй SVG-путь через strokeDashoffset и добавь проверку prefers-reduced-motion

Как установить anime-js

1Через Skills CLI (Vercel)

npx skills add Mindrally/skills --skill anime-js -a claude-code

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

~/.claude/skills/anime-js/SKILL.md

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

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

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

grpc-development Скилл ведёт агента по шагам сборки gRPC-сервиса: контракт в .proto, генерация стабов, сервер, клиент, интерсепторы. CX Codex +1 755установок backend-development Задаёт агенту правила бэкенд-разработки на C++ и Elixir/Phoenix: именование, управление памятью, контексты Phoenix, обработка ошибок. CX Codex +1 753установок ethereum Задаёт агенту правила разработки смарт-контрактов Ethereum: паттерны безопасности, интеграция OpenZeppelin, тесты на Hardhat. CX Codex +1 737установок devops Задаёт агенту роль старшего DevOps-инженера: правила для Kubernetes, CI/CD, Bash, Ansible и Python. Пригодится, когда инфраструктуру пишут вместе с моделью. CX Codex +1 739установок ruby Задаёт агенту стиль кода, возможности Ruby 3.x и правила тестирования на RSpec. Пригодится, когда пишете или правите Ruby-проект. CX Codex +1 734установок spring-framework Скилл задаёт агенту правила разработки на Spring Framework и Spring Boot: структура слоёв, внедрение зависимостей, тесты, REST. CX Codex +1 731установок anthropic-claude-development Скилл для работы с Anthropic Claude API: Messages API, вызов инструментов, промпт-инжиниринг и сборка приложений на моделях Claude. CX Codex +1 728установок sanity Скилл для работы с Sanity CMS: помогает описывать схемы документов, писать GROQ-запросы и связывать контент с TypeScript. CX Codex +1 725установок

Другие версии anime-js

Похожие

animejs freshtechbro Скилл для ИИ-агента, который подсказывает синтаксис Anime.js: таймлайны, stagger, морфинг SVG и покадровые последовательности. CX Codex +1 2 800установок whiteboard-animation iart-ai Скилл учит ИИ анимировать векторные рисунки и рукописный текст в стиле VideoScribe с рукой, держащей маркер. Помогает собирать скрайбинг-видео под закадровый голос. CX Codex +1 1 400установок gsap MengTo Скилл для ИИ-агента, который помогает писать и отлаживать веб-анимации на GSAP: таймлайны, ScrollTrigger, stagger, трансформации. CX Codex +1 1 800установок route-based patterns.dev Подсказывает агенту, как разбить SPA по маршрутам и грузить только тот код, который нужен на текущей странице. Пригодится, когда маршрутов много, а стартовая загрузка тормозит. CX Codex +1 1 400установок claude-d3js-skill davila7 Подсказывает агенту, как строить нестандартные визуализации на d3.js: сетевые графы, географические карты, плавные переходы. Пригодится, когда обычных библиотек графиков не хватает. 531установок client-side-rendering patterns.dev Скилл объясняет клиентский рендеринг в React: когда он уместен, а когда страница провалится по SEO и первой отрисовке. CX Codex +1 1 000установок

Рядом в теме «Фронтенд и UI»

Всё по теме «Фронтенд и UI» →

Вопросы о anime-js

Как установить anime-js в Claude?

Выполните npx skills add Mindrally/skills --skill anime-js -a claude-code. Файл скилла появится по пути ~/.claude/skills/anime-js/SKILL.md.

Что делает скилл anime-js?

Даёт агенту инструкции по Anime.js: базовые анимации, таймлайны, stagger, easing, SVG и интеграция с React. Отдельно разобрана производительность — трансформы вместо свойств раскладки.

Нужна ли сама библиотека Anime.js?

Да, скилл описывает работу с ней и приводит установку через npm install animejs. Без установленного пакета примеры не запустятся.

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

SKILL.md · Apache-2.0
---
name: anime-js
description: Expert guidelines for building performant animations with Anime.js animation library
metadata:
  maintainer: Mindrally
  source: https://github.com/Mindrally/skills
---

# Anime.js Animation Guidelines

You are an expert in Anime.js, JavaScript, and web animation performance. Follow these guidelines when creating animations.

## Core Principles

### Installation and Import
```bash
npm install animejs
```

```javascript
// Full import
import anime from "animejs";

// Modular import for smaller bundle size
import { animate, timeline, stagger } from "animejs";
```

### Basic Animation
```javascript
anime({
  targets: ".element",
  translateX: 250,
  rotate: "1turn",
  duration: 800,
  easing: "easeInOutQuad"
});
```

## Performance Optimization

### Frame Rate Control
```javascript
// Adjust global frame rate for lower-end devices
anime.suspendWhenDocumentHidden = true;

// Control FPS for specific animations
anime({
  targets: ".element",
  translateX: 250,
  update: function(anim) {
    // Custom frame rate limiting if needed
  }
});
```

### Use Transforms Over Layout Properties
```javascript
// Good - uses GPU-accelerated transforms
anime({
  targets: ".element",
  translateX: 100,  // Good
  translateY: 50,   // Good
  scale: 1.2,       // Good
  rotate: 45,       // Good
  opacity: 0.5      // Good
});

// Avoid - causes layout recalculation
anime({
  targets: ".element",
  left: 100,        // Avoid
  top: 50,          // Avoid
  width: 200,       // Avoid
  height: 150       // Avoid
});
```

### Use Animatable for High-Frequency Updates
```javascript
import { Animatable } from "animejs";

// Optimized for continuous updates (mouse tracking, etc.)
const animatable = new Animatable(".cursor", {
  x: 0,
  y: 0
});

document.addEventListener("mousemove", (e) => {
  animatable.x = e.clientX;
  animatable.y = e.clientY;
});
```

## Timeline Animations

### Basic Timeline
```javascript
const tl = anime.timeline({
  easing: "easeOutExpo",
  duration: 750
});

tl.add({
  targets: ".header",
  translateY: [-50, 0],
  opacity: [0, 1]
})
.add({
  targets: ".content",
  translateY: [30, 0],
  opacity: [0, 1]
}, "-=500") // Overlap by 500ms
.add({
  targets: ".footer",
  translateY: [30, 0],
  opacity: [0, 1]
}, "-=500");
```

### Timeline Controls
```javascript
const tl = anime.timeline({
  autoplay: false
});

// Control methods
tl.play();
tl.pause();
tl.restart();
tl.reverse();
tl.seek(1000); // Go to 1 second
```

## Stagger Animations

### Basic Stagger
```javascript
anime({
  targets: ".grid-item",
  translateY: [50, 0],
  opacity: [0, 1],
  delay: anime.stagger(100) // 100ms delay between each
});
```

### Advanced Stagger Options
```javascript
// Stagger from center
anime({
  targets: ".grid-item",
  scale: [0, 1],
  delay: anime.stagger(100, { from: "center" })
});

// Grid stagger
anime({
  targets: ".grid-item",
  scale: [0, 1],
  delay: anime.stagger(50, {
    grid: [14, 5],
    from: "center"
  })
});

// Stagger with easing
anime({
  targets: ".item",
  translateX: 250,
  delay: anime.stagger(100, { easing: "easeOutQuad" })
});
```

## Easing Functions

### Built-in Easings
```javascript
// Common easings
anime({
  targets: ".element",
  translateX: 250,
  easing: "easeOutExpo"     // Fast start, slow end
  // easing: "easeInOutQuad" // Smooth both ends
  // easing: "easeOutElastic(1, .5)" // Bouncy
  // easing: "easeOutBounce" // Bounce effect
  // easing: "spring(1, 80, 10, 0)" // Physics-based
});
```

### Custom Easing
```javascript
anime({
  targets: ".element",
  translateX: 250,
  easing: "cubicBezier(0.25, 0.1, 0.25, 1)"
});
```

## SVG Animation

### Path Animation
```javascript
const path = anime.path(".motion-path");

anime({
  targets: ".element",
  translateX: path("x"),
  translateY: path("y"),
  rotate: path("angle"),
  easing: "linear",
  duration: 2000,
  loop: true
});
```

### Line Drawing
```javascript
anime({
  targets: "path",
  strokeDashoffset: [anime.setDashoffset, 0],
  easing: "easeInOutSine",
  duration: 1500,
  delay: anime.stagger(250)
});
```

### Morphing
```javascript
anime({
  targets: "path",
  d: [
    { value: "M10 10 L90 10 L90 90 L10 90 Z" },
    { value: "M10 50 Q50 10 90 50 Q50 90 10 50 Z" }
  ],
  easing: "easeInOutQuad",
  duration: 1000,
  loop: true,
  direction: "alternate"
});
```

## Function-Based Values

### Dynamic Values
```javascript
anime({
  targets: ".element",
  translateX: function(el, i) {
    return i * 100; // Each element moves further
  },
  rotate: function(el, i, total) {
    return (360 / total) * i; // Distribute rotation
  },
  delay: function(el, i) {
    return i * 50;
  }
});
```

## Callbacks and Events

### Animation Events
```javascript
anime({
  targets: ".element",
  translateX: 250,
  begin: function(anim) {
    console.log("Animation started");
  },
  update: function(anim) {
    console.log(Math.round(anim.progress) + "%");
  },
  complete: function(anim) {
    console.log("Animation completed");
  }
});
```

### Looping
```javascript
anime({
  targets: ".element",
  translateX: 250,
  direction: "alternate",
  loop: true,
  loopComplete: function(anim) {
    console.log("Loop completed");
  }
});
```

## React Integration

### Basic React Usage
```tsx
import { useEffect, useRef } from "react";
import anime from "animejs";

function AnimatedComponent() {
  const elementRef = useRef(null);

  useEffect(() => {
    const animation = anime({
      targets: elementRef.current,
      translateX: 250,
      duration: 800
    });

    return () => {
      animation.pause(); // Cleanup
    };
  }, []);

  return <div ref={elementRef}>Animated</div>;
}
```

### With useCallback for Controls
```tsx
function ControlledAnimation() {
  const elementRef = useRef(null);
  const animationRef = useRef(null);

  const playAnimation = useCallback(() => {
    animationRef.current = anime({
      targets: elementRef.current,
      translateX: [0, 250],
      duration: 800
    });
  }, []);

  useEffect(() => {
    return () => {
      animationRef.current?.pause();
    };
  }, []);

  return (
    <>
      <div ref={elementRef}>Animated</div>
      <button onClick={playAnimation}>Play</button>
    </>
  );
}
```

## Web Animations API Bridge

### Using WAAPI for Native Performance
```javascript
import { wapiAnimate } from "animejs";

// Uses browser's native Web Animations API
wapiAnimate(".element", {
  translateX: 250,
  duration: 800
});
```

## Accessibility

### Respect Reduced Motion
```javascript
const prefersReducedMotion = window.matchMedia(
  "(prefers-reduced-motion: reduce)"
).matches;

anime({
  targets: ".element",
  translateX: 250,
  duration: prefersReducedMotion ? 0 : 800,
  easing: prefersReducedMotion ? "linear" : "easeOutExpo"
});
```

## Best Practices Summary

1. Use transforms (translate, scale, rotate) over layout properties
2. Import only needed modules for smaller bundle size
3. Use stagger for multiple element animations
4. Clean up animations on component unmount
5. Use Animatable for high-frequency updates
6. Leverage timeline for complex sequences
7. Use function-based values for dynamic animations
8. Respect reduced motion preferences
9. Consider WAAPI bridge for native performance
10. Test on lower-powered devices

© Mindrally · Apache-2.0 · Mindrally/skills

Смотрите также

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

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