Skip to main content

Global Configuration

Set default options for all ScrollingText components in your application using the ScrollingTextProvider.

Basic Setup

Wrap your app with the ScrollingTextProvider and pass default options:

index.tsx
import ReactDOM from "react-dom/client";
import App from "./App.tsx";
import { ScrollingTextProvider } from "web-scrolling-text/react";
import "./index.css";

ReactDOM.createRoot(document.getElementById("root")!).render(
<ScrollingTextProvider
options={{
interval: 3000,
animationDuration: 1000,
loop: true,
}}
>
<App />
</ScrollingTextProvider>
);

Now all ScrollingText components will inherit these options:

App.tsx
import React from "react";
import ScrollingText from "web-scrolling-text/react";

function App() {
return (
<div>
{/* This will use interval: 3000, animationDuration: 1000, loop: true */}
<ScrollingText>
<div>Inherits</div>
<div>Global</div>
<div>Options</div>
</ScrollingText>
</div>
);
}

export default App;

With Custom Animations

Set global animations using CSS:

index.tsx
import ReactDOM from "react-dom/client";
import App from "./App.tsx";
import { ScrollingTextProvider } from "web-scrolling-text/react";
import "./index.css";

ReactDOM.createRoot(document.getElementById("root")!).render(
<ScrollingTextProvider
options={{
interval: 3000,
animationDuration: 1000,
loop: true,
enterAnimation: "fadeIn",
exitAnimation: "fadeOut",
}}
>
<App />
</ScrollingTextProvider>
);
index.css
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}

@keyframes fadeOut {
from {
opacity: 1;
transform: translateY(0);
}
to {
opacity: 0;
transform: translateY(-20px);
}
}

With Pre-built Animations

Use the library's pre-built animations globally:

index.tsx
import ReactDOM from "react-dom/client";
import App from "./App.tsx";
import { ScrollingTextProvider } from "web-scrolling-text/react";
import fade from "web-scrolling-text/animation/fade";
import "./index.css";

ReactDOM.createRoot(document.getElementById("root")!).render(
<ScrollingTextProvider
options={{
...fade,
interval: 2500,
animationDuration: 800,
loop: true,
}}
>
<App />
</ScrollingTextProvider>
);
tip

All ScrollingText components in your app will now use the fade animation by default!

Overriding Global Options

Individual components can override the global options:

App.tsx
import React from "react";
import ScrollingText from "web-scrolling-text/react";
import bounce from "web-scrolling-text/animation/bounce";

function App() {
return (
<div>
{/* Uses global options */}
<ScrollingText>
<div>Global</div>
<div>Settings</div>
</ScrollingText>

{/* Overrides with custom options */}
<ScrollingText
options={{
interval: 1000,
...bounce
}}
>
<div>Custom</div>
<div>Settings</div>
</ScrollingText>
</div>
);
}

export default App;

Next.js App Router

For Next.js with the App Router, create a client component wrapper:

app/providers.tsx
"use client";

import { ScrollingTextProvider } from "web-scrolling-text/react";
import fade from "web-scrolling-text/animation/fade";

export function Providers({ children }: { children: React.ReactNode }) {
return (
<ScrollingTextProvider
options={{
...fade,
interval: 3000,
animationDuration: 1000,
}}
>
{children}
</ScrollingTextProvider>
);
}
app/layout.tsx
import { Providers } from "./providers";

export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<body>
<Providers>{children}</Providers>
</body>
</html>
);
}

Next.js Pages Router

For Next.js with Pages Router:

pages/_app.tsx
import type { AppProps } from "next/app";
import { ScrollingTextProvider } from "web-scrolling-text/react";
import fade from "web-scrolling-text/animation/fade";

export default function App({ Component, pageProps }: AppProps) {
return (
<ScrollingTextProvider
options={{
...fade,
interval: 3000,
}}
>
<Component {...pageProps} />
</ScrollingTextProvider>
);
}

Complete Example

index.tsx
import ReactDOM from "react-dom/client";
import App from "./App.tsx";
import { ScrollingTextProvider } from "web-scrolling-text/react";
import fade from "web-scrolling-text/animation/fade";
import "./index.css";

ReactDOM.createRoot(document.getElementById("root")!).render(
<ScrollingTextProvider
options={{
// Animation
...fade,

// Timing
interval: 2500,
animationDuration: 800,

// Behavior
loop: true
}}
>
<App />
</ScrollingTextProvider>
);
App.tsx
import React from "react";
import ScrollingText from "web-scrolling-text/react";
import bounce from "web-scrolling-text/animation/bounce";

function App() {
return (
<div>
<h2>Uses Global Fade Animation</h2>
<ScrollingText>
<div>Hello</div>
<div>World</div>
</ScrollingText>

<h2>Overrides with Bounce Animation</h2>
<ScrollingText options={{ ...bounce, interval: 1500 }}>
<div>Custom</div>
<div>Animation</div>
</ScrollingText>

<h2>Partial Override</h2>
<ScrollingText options={{ interval: 5000 }}>
<div>Slow</div>
<div>Transition</div>
</ScrollingText>
</div>
);
}

export default App;

Benefits of Global Configuration

Consistency - Same behavior across your entire app
DRY Principle - Define options once, use everywhere
Easy Updates - Change global settings in one place
Flexible Overrides - Components can still customize as needed
Better Maintainability - Centralized configuration management

info

Learn more about using pre-built animations globally in the Animations documentation.