UNPKG

pagesnap

Version:

Lightweight full-page scrolling library in vanilla JavaScript.

164 lines (121 loc) 3.44 kB
# pagesnap **pagesnap** is a lightweight, zero-dependency JavaScript library for creating full-page scrolling websites. **Demo**: https://ppetkov89.github.io/pagesnap/ Supports vertical scroll snapping Mouse, keyboard, and touch navigation URL hash anchors Looping scroll Callbacks + responsive behavior Destroy/rebuild support Tiny footprint & easy to integrate --- ## 🚀 Installation ```bash npm install pagesnap ``` Or use via CDN: ```html <script src="https://unpkg.com/pagesnap"></script> ``` --- ## 🔧 Usage ### 1. HTML structure ```html <div id="container"> <section id="home">Home</section> <section id="about">About</section> <section id="contact">Contact</section> </div> ``` --- ### 2. CSS (required) ```css html, body { margin: 0; padding: 0; overflow: hidden; height: 100%; } #container { height: 100vh; } section { height: 100vh; } ``` --- ### 3. JavaScript ```javascript import pagesnap from 'pagesnap'; const snap = pagesnap('#container', { delay: 700, loop: true, hash: true, disableBelow: 768, onBeforeLeave: (from, to) => { console.log('Leaving section:', from, '→', to); }, onAfterLoad: (index) => { console.log('Arrived at section:', index); } }); ``` --- ## ⚙️ Options | Option | Type | Default | Description | |------------------|----------|---------|--------------------------------------------------------------| | `delay` | `number` | `700` | Transition delay in milliseconds | | `loop` | `boolean`| `false` | Loop from last section to first and vice versa | | `hash` | `boolean`| `false` | Enable hash-based navigation (e.g., `#about`) | | `disableBelow` | `number` | `0` | Disable snapping if screen width is below this value | | `onBeforeLeave` | `function`| `null` | Callback before a section change `(fromIndex, toIndex)` | | `onAfterLoad` | `function`| `null` | Callback after a section change `(currentIndex)` | --- ## 📦 Public API ```javascript snap.goTo(index); // Scroll to section index snap.getCurrent(); // Returns current section index snap.destroy(); // Disable pagesnap and unbind everything snap.rebuild(); // Re-enable after destroy ``` --- ## 🎨 Custom Styling (optional) ```css .pagesnap-nav { position: fixed; top: 50%; right: 20px; transform: translateY(-50%); display: flex; flex-direction: column; gap: 10px; z-index: 1000; } .pagesnap-dot { width: 12px; height: 12px; border-radius: 50%; border: 2px solid white; background: rgba(255, 255, 255, 0.5); cursor: pointer; transition: background 0.3s; } .pagesnap-dot.active { background: white; } ``` --- ## 📜 License MIT License © 2025 Petko Petkov Permission is granted to use, copy, modify, and distribute this software for any purpose. This software is provided "as is" without warranty of any kind. --- ## ❤️ Credits Built with love and simplicity. Inspired by `fullPage.js` but with a lighter footprint and modern vanilla JavaScript design. --- ## 🔗 Roadmap (Optional) - [ ] Horizontal slides support - [ ] Lazy loading sections - [ ] Smooth scroll-to-anchor on click - [ ] Full accessibility (ARIA roles, focus trapping)