Annnimate
Every component, in every framework.
Drift Gallery is one of 50+ GSAP components, each shipping in React, Vue, and HTML/CSS/JS with the same production tuning.
The library
Curated, not a catalog dump.
Every signature component, built for a real site. Filter, preview live, copy in React or Vue.
Browse the libraryLandmark Kits
Depth, not breadth.
A deep, stand-alone collection built around one system. The first Kit is Reveal - preloaders and hero sections, one mixable system, WebGL and GSAP. React, Vue, HTML / CSS / JS. Not for Webflow.
See the Reveal KitConcepts, patterns, tools
Learn the vocabulary.
Definitions and examples for the GSAP and animation concepts behind production motion. Free, citable, and cross-linked with the components that use each idea.
Open conceptsAnnnimate
Drift Gallery is one of 50+ GSAP components, each shipping in React, Vue, and HTML/CSS/JS with the same production tuning.
A WebGL card slider (Three.js) for a marketing section: a horizontal row of portrait product cards drifting on autoplay across a lower band, each image shader-fit to fill its card. Drag to throw the row (Draggable + Inertia) or let it drift; hovering a card lifts it while the cursor magnetically parts its neighbours, and the centred card syncs a live detail panel (index, title, category, code). A filmic grade rides the whole frame - chromatic aberration on motion, grain and vignette - and it stays responsive 320-1920 with a touch-friendly focal-card layout on mobile. VANTA OL-26 editorial-sports demo brand.
Drift Gallery ships as a copy-paste Vue 3 single-file component. The only dependency is GSAP - Vue's reactivity and lifecycle hooks replace the React useGSAP adapter, so no extra package is needed.
Drift Gallery is a leaf-level interactive component. Drop it into any page, layout, or other component. It works in Vue 3 + Vite, Nuxt 3, and any standalone Vue setup.
In Nuxt, no special handling is needed - the component is client-safe and self-cleaning. If you want to ensure it never runs on the server (rare), wrap your usage in <ClientOnly>.
The component uses the <script setup> composition API and TypeScript-friendly defineProps.
GSAP cleanup in onUnmounted, not onBeforeUnmount
onUnmounted to kill tweens and ScrollTriggers. onBeforeUnmount fires while the DOM is still mounted, but onUnmounted is the more idiomatic place for animation cleanup in Vue 3.Template refs are .value, not .current
const el = ref(null); access as el.value (not el.current like React). Pass el.value into gsap.to / gsap.from targets.Register plugins once, outside setup
gsap.registerPlugin(ScrollTrigger, ...)) can run at module top level in Vue 3 + Vite because the build is client-first. In Nuxt with SSR, wrap in if (process.client) or place inside onMounted.. syntax. Vue 2 support is not planned. If you need Vue 2, the HTML/CSS/JS variant works in any context.vue-tsc and Volar. Props match the data-anm-* attributes documented on the main detail page.gsap.set on onMounted before the first paintable frame. For above-the-fold use in SSR contexts, add a CSS opacity:0 default that the component clears.The full Vue implementation lives on the component page, with the live demo, every format side by side, and the ability to edit and re-run it in the browser.
Open Drift Gallery