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.
The initLocomotiveScroll function is designed to work in a browser environment, which is why it checks if window is defined before proceeding.
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.
The $state, $props(), and $effect syntax are specific to Svelte 5's new reactive primitives. They replace the older let, export let, and $: syntax respectively.
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 locomotiveScroll store 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, and data-scroll to manage scrolling behavior and animations.