scroll-snap is a powerful yet lightweight TypeScript library that provides smooth and customizable page snapping functionality.
Built as a modern implementation of CSS Scroll Snap.
- 🪶 Lightweight (~2KB gzipped)
- 🌐 Cross-browser support
- 💪 Zero dependencies
- 🎯 TypeScript ready
- ⚡ Smooth animations
- 🎨 Customizable settings
- ⌨️ Keyboard navigation support
- 🖱️ Optional navigation arrows
yarn add scroll-snapimport createScrollSnap from 'scroll-snap'
const element = document.getElementById('container')
const { bind, unbind } = createScrollSnap(element, {
  snapDestinationY: '100%',
})Check out the React Hooks demo to see how to integrate scroll-snap in a React application.
| Option | Type | Default | Description | 
|---|---|---|---|
| snapDestinationX | string | number | - | Horizontal snap points (e.g., '100%', '500px') | 
| snapDestinationY | string | number | - | Vertical snap points (e.g., '100%', '500px') | 
| timeout | number | 100 | Delay before snapping after scroll ends (ms) | 
| duration | number | 300 | Animation duration (ms) | 
| threshold | number | 0.2 | Scroll distance threshold (0 to 1) | 
| snapStop | boolean | false | Prevents skipping intermediate snap positions | 
| showArrows | boolean | false | Shows navigation arrows when hovering | 
| enableKeyboard | boolean | true | Enables keyboard arrow keys navigation | 
| easing | (t: number) => number | linear | Animation easing function | 
const scrollSnap = createScrollSnap(element, {
  snapDestinationY: '100vh',
  duration: 300,
  easing: t => t < 0.5 ? 2 * t * t : -1 + (4 - 2 * t) * t
})const scrollSnap = createScrollSnap(element, {
  snapDestinationX: '100%',
  showArrows: true,
  enableKeyboard: true
})const scrollSnap = createScrollSnap(element, {
  snapDestinationY: '50vh',
  threshold: 0.4, // Requires more scroll distance to trigger snap
})Enables scroll snapping and attaches event listeners.
Disables scroll snapping and removes event listeners.
# Clone the repository
git clone https://github.com/lucafalasco/scroll-snap.git
cd scroll-snap
# Install dependencies
yarn
# Start development server
yarn start
# Run unit tests
yarn test
# Run e2e tests
yarn test:e2e
# Build for production
yarn buildThe dev server will start at http://localhost:8080 with hot reloading enabled and a playground environment for testing.
- Fork the repository
- Create your feature branch: git checkout -b feature/my-feature
- Commit your changes: git commit -am 'Add my feature'
- Push to the branch: git push origin feature/my-feature
- Submit a pull request
- Chrome 61+
- Firefox 63+
- Safari 11+
- Edge 79+
MIT © Luca Falasco