vue-fast-marquee
v2.0.2
Published
A lightweight Vue 3 component that harnesses the power of CSS animations to create silky smooth marquees.
Maintainers
Readme
Vue Fast Marquee
A lightweight Vue 3 component that harnesses the power of CSS animations to create silky smooth marquees.
🎮 Interactive Playground / Demo
📌 Upgrading to v2.x: Vertical marquees now use native CSS column layouts (no manual width/height swapping needed). This release also adds interactive drag scrubbing (
draggable), programmatic playback methods (play,pause,reset, etc.), and dark mode gradient support (gradientColorDark).
🚀 What's New in v2.x
- 🖱️ Drag-to-Scrub: Set
draggableto allow users to drag or swipe to scrub through marquee content. - 🎮 Imperative Controls: Access component playback methods (
play(),pause(),toggle(),reset()) and state via template refs. - 🌙 Dark Mode Gradient: Added
gradientColorDarkfor dark mode gradient masks (activates when.darkclass is present). - 📐 Native Vertical Marquee: Vertical directions (
up/down) now render natively with CSS flex column layout and vertical gradients. - ⚡ Smooth Playback: Improved hover and click pause handling to work seamlessly alongside drag scrubbing.
Installation
# if you're using npm
npm i vue-fast-marquee
# if you're using yarn
yarn add vue-fast-marquee
# if you're using pnpm
pnpm i vue-fast-marqueeUsage
The most common use case is to register the component globally.
// main.ts or similar
import 'vue-fast-marquee/style.css'; // import the styles
import { createApp } from 'vue';
import Marquee from 'vue-fast-marquee';
createApp(App).use(Marquee).mount('#app');Alternatively you can also import the component locally.
<script setup lang="ts">
import { Marquee } from 'vue-fast-marquee';
</script>You can then use the component in your template.
<script setup lang="ts">
import { Marquee } from 'vue-fast-marquee';
import MyComponent from '../components/MyComponent.vue';
</script>
<template>
<Marquee>
<MyComponent />
<MyComponent />
<MyComponent />
</Marquee>
</template>Props
| Property | Type | Default | Description |
| :------------------ | :---------------------------------- | :-------- | :------------------------------------------------------------------------------------------ |
| autoFill | boolean | false | Whether to automatically fill blank space in the marquee with copies of the children or not |
| play | boolean | true | Whether to play or pause the marquee |
| pauseOnHover | boolean | false | Whether to pause the marquee when hovered |
| pauseOnClick | boolean | false | Whether to pause the marquee when clicked |
| direction | "left" \| "right" \| "up" \| "down" | "left" | The direction the marquee is sliding |
| speed | number | 50 | Speed calculated as pixels/second |
| delay | number | 0 | Duration to delay the animation after render, in seconds |
| loop | number | 0 | The number of times the marquee should loop, 0 is equivalent to infinite |
| gradient | boolean | false | Whether to show the gradient mask on the edges or not |
| gradientColor | string | "white" | The color of the gradient mask |
| gradientColorDark | string | gradientColor | The color of the gradient mask in dark mode (activates when .dark class is present). Defaults to gradientColor if not set |
| gradientWidth | number \| string | 200 | The width/height of the gradient on either side (in pixels or CSS unit string) |
| draggable | boolean | false | Enable manual dragging/swiping with pointer/touch to scrub through the marquee |
Events
| Event Name | Description |
| :-------------- | :----------------------------------------------------------------------------------------------------------- |
| finish | Emitted when the marquee finishes scrolling and stops. Only calls if loop is non-zero. |
| cycleComplete | Emitted when the marquee finishes a loop. Does not call if maximum loops are reached (use onFinish instead). |
Component Methods
Access methods programmatically using a Vue template ref:
<script setup lang="ts">
import { ref } from 'vue';
import { Marquee } from 'vue-fast-marquee';
const marqueeRef = ref<InstanceType<typeof Marquee>>();
</script>
<template>
<Marquee ref="marqueeRef">...</Marquee>
<button @click="marqueeRef?.pause()">Pause</button>
<button @click="marqueeRef?.reset()">Reset</button>
</template>| Method / Property | Type | Description |
| :--- | :--- | :--- |
| play() | () => void | Starts or resumes the animation |
| pause() | () => void | Pauses the animation |
| toggle() | () => void | Toggles between play and pause |
| reset() | () => void | Resets animation time to 0 and starts playing |
| isPlaying | ComputedRef<boolean> | Whether the animation is currently playing |
| isPaused | ComputedRef<boolean> | Whether the animation is currently paused |
