Infinite Marquee in Vue.
A row of content that scrolls on its own, sideways or up and down, and you can grab it to scrub through and let go to keep it going. Good for logos, testimonials and anything that repeats.
Install Infinite Marquee in your Vue project
Infinite Marquee 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.
Where it goes in your Vue app
Infinite Marquee 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.
Nuxt SSR flash
Template refs in Vue
Common questions
- Does Infinite Marquee work in Nuxt 3?
- Yes. Drop it into any page or component. The component is client-safe; Nuxt handles the SSR boundary automatically. If you want explicit client-only rendering, wrap in
. - Does Infinite Marquee work with Vue 2?
- No - the component uses the Vue 3 Composition API and
syntax. Vue 2 support is not planned. If you need Vue 2, the HTML/CSS/JS variant works in any context. - Does Infinite Marquee work with TypeScript in Vue?
- Yes. The component is typed and works with both
vue-tscand Volar. Props match thedata-anm-*attributes documented on the main detail page. - Will the animation flash before hydration in Nuxt SSR?
- Brief flash is possible because GSAP needs the client to initialize. The component sets the parked state via
gsap.setononMountedbefore the first paintable frame. For above-the-fold use in SSR contexts, add a CSS opacity:0 default that the component clears.
Copy the Vue code
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 Infinite Marquee