Installing Locomotive Scroll with Svelte 5 and SvelteKit
Installation
First, let's install the necessary packages:
npm install locomotive-scroll@betaCreate a Locomotive Scroll Store
We'll start by creating a Svelte store to manage our Locomotive Scroll instance:
import { writable } from "svelte/store";
export const locomotiveScroll = writable(null);
export async function initLocomotiveScroll(options = {}) {
if (typeof window !== "undefined") {
const LocomotiveScroll = (await import("locomotive-scroll")).default;
const instance = new LocomotiveScroll({
el: document.querySelector("[data-scroll-container]"),
lenisOptions: {
...options,
},
});
locomotiveScroll.set(instance);
return instance;
}
}This code creates a Svelte store called locomotiveScroll and an initialization function initLocomotiveScroll. The function dynamically imports Locomotive Scroll, creates an instance, and stores it in the locomotiveScroll store.
Set Up the Layout Component
Next, we'll set up our layout component to initialize Locomotive Scroll:
This layout component initializes Locomotive Scroll when the component mounts and updates it when the route changes. It also ensures that Locomotive Scroll is destroyed when the component unmounts.
Using Locomotive Scroll in a Page Component
Finally, let's see how to use Locomotive Scroll in a page component:
This page component demonstrates how to access the Locomotive Scroll instance and use its data attributes for scroll animations.
Make sure to wrap your content in elements with the data-scroll-section attribute, and use data-scroll and data-scroll-speed attributes on elements you want to animate.
Result
When implemented correctly, you should see a smooth scrolling effect with animated elements. Here's a visual representation of what you might see:
[A webpage with a centered column of text]
What's up?
😬
[The text "What's up?" moves slightly as you scroll, while the emoji moves more dramatically due to its higher scroll speed]
Explanation of Key Concepts
Svelte Stores: The
locomotiveScrollstore is used to make the Locomotive Scroll instance accessible throughout the app.Dynamic Imports: Locomotive Scroll is imported dynamically to ensure it only loads in the browser environment.
Lifecycle Management: The layout component initializes Locomotive Scroll on mount and destroys it on unmount.
Route Change Handling: The scroll instance is updated when the route changes to ensure smooth transitions between pages.
Data Attributes: Locomotive Scroll uses data attributes like
data-scroll-container,data-scroll-section, anddata-scrollto manage scrolling behavior and animations.
Last updated