awesome-repositories.com
Blog
MCP
awesome-repositories.com

Discover the best open-source repositories with AI-powered search.

ExploreCurated searchesOpen-source alternativesSelf-hosted softwareBlogSitemap
ProjectMCP serverAboutHow we rankPress
LegalPrivacyTerms
© 2026 Bringes Technology SRL·VAT RO45896025·hello@awesome-repositories.com
jakiestfu avatar

jakiestfu/Snap.js

0
View on GitHub↗
5,952 stars·646 forks·JavaScript·12 viewsjakiestfu.github.io/Snap.js↗

Snap.js

Snap.js is a JavaScript library for building draggable side navigation panels on touch devices. It enables slide-in menus from the left or right screen edge, driven by a gesture-based state machine that interprets drag and flick gestures to open and close the panel.

The library distinguishes horizontal menu drags from vertical scrolling by analyzing the initial touch movement angle, and locks menu movement to a single axis to prevent interference. It uses hardware-accelerated CSS transforms for smooth animations and provides configurable snap thresholds that determine whether a drag should open or close the menu based on release distance. Event listeners are attached to the document body, with support for excluding specific child elements from triggering the menu.

Snap.js exposes a programmatic toggle API for opening or closing menus without gesture input, along with lifecycle callbacks that fire at drag start, open, close, and animation completion. It also supports custom CSS class application, drag direction restriction, and real-time querying of the menu's position and open percentage.

Features

  • Side Menu Frameworks - Opens a navigation panel from the screen edge using drag and flick gestures for mobile interaction.
  • Gesture Menus - Detects drag and flick gestures to open and close mobile navigation panels with configurable sensitivity.
  • Gesture State Machines - Manages menu open/close states by tracking drag gestures and snapping to predefined positions.
  • Touch Drag Intent Detections - Determines whether a touch drag should open the side menu or scroll the page.
  • CSS Transform Animations - Animates menu sliding using hardware-accelerated CSS transforms for smooth mobile performance.
  • Side Menu Visibility Toggles - Switches the side menu between open and closed states using a programmatic call or a gesture.
  • Snap Thresholds - Uses configurable pixel thresholds to decide whether a drag should snap the menu open or closed.
  • Draggable Panels - Builds user interface panels that can be dragged open or closed with customizable thresholds and directional restrictions.
  • Drag Thresholds - Configures the minimum drag distance required to trigger the menu to snap open or closed.
  • Draggable Axis Constraints - Locks menu movement to the horizontal axis, preventing vertical interference during drags.
  • Programmatic Menu Toggles - Opens or closes a specified side menu programmatically with custom buttons or triggers.
  • Slide-Out Panels - Lets users slide a navigation panel into view by dragging the main content area on touch devices.
  • Touch Gesture Detection - Detects and interprets touch drags, flicks, and angles to determine user intent for opening or closing interface elements.
  • Touch Angle Disambiguation - Determines user intent by calculating the initial touch movement angle to distinguish horizontal menu drags from vertical scrolls.
  • Menu State Toggles - Exposes open/close methods that bypass gesture detection for external controls.
  • Drag Exclusion Elements - Prevents the menu from opening when users interact with designated child elements like sliders or forms.
  • Lifecycle Callbacks - Fires user-defined callbacks at drag start, open, close, and animation completion.
  • Menu Lifecycle Callbacks - Fires callbacks when dragging starts, the menu opens, or an animation completes.
  • Drag Direction Restrictions - Limits menu dragging to one specific side or disables it entirely to control how the panel is revealed.
  • Mobile Animation Libraries - Adds smooth slide animations and snap behaviors to mobile interface elements triggered by touch gestures.
  • Expandable Menu Contents - Displays additional content like nested navigation links or extra options inside the side panel.
  • Lifecycle Callbacks - Manages side menu states and events including open, close, drag start, and animation completion with callback hooks.

Star history

Star history chart for jakiestfu/snap.jsStar history chart for jakiestfu/snap.js

How this analysis was created: This summary and feature list were written by an AI model that read the project's README and public documentation pages. Each feature links to the documentation it came from; stars, license and language come straight from the GitHub API. The model does not read the source code, and the analysis is refreshed when the project is re-analysed. Learn more on our About page.

AI search

Explore more awesome repositories

Describe what you need in plain English — the AI ranks thousands of curated open-source projects by relevance.

Start searching with AI

Open-source alternatives to Snap.js

Similar open-source projects, ranked by how many features they share with Snap.js.
  • viewdeck/viewdeckV

    ViewDeck/ViewDeck

    5,268View on GitHub↗

    ViewDeck is a side menu management framework and gesture-based navigation library for iOS. It provides a system for coordinating the presentation, animation, and interaction logic of left and right side menus within a container view controller. The framework features a dynamic menu controller that allows for updating or removing active menu controllers at runtime to modify available navigation options. It includes a transition coordinator to manage custom motion and visual properties for sliding navigation panels. The library supports both programmatic menu control and gesture-based activati

    Objective-C
    View on GitHub↗5,268
  • juliangarnier/animejuliangarnier avatar

    juliangarnier/anime

    69,932View on GitHub↗

    This project is a declarative motion framework and JavaScript animation engine designed to transition CSS properties, SVG attributes, and DOM elements. It provides a comprehensive set of tools for creating complex, multi-part motion sequences by synchronizing animations, timers, and callbacks into a single, unified timeline. The library distinguishes itself through a robust timeline-based sequence orchestrator that allows for precise timing, label-based control, and hierarchical nesting of animations. It also features a physics-driven interaction library that enables draggable elements with c

    JavaScriptanimationanimecanvas
    View on GitHub↗69,932
  • mutualmobile/mmdrawercontrollermutualmobile avatar

    mutualmobile/MMDrawerController

    6,714View on GitHub↗

    MMDrawerController is a side drawer navigation controller for mobile applications. It serves as a mobile UI navigation container that organizes a primary center content area and a hidden slide-out side menu. The project provides a transition animation framework to define custom visual effects when presenting or dismissing the side menu. It also includes a system for customizable gesture navigation, allowing the definition of touch gestures and pan events to trigger menu transitions. The controller covers app layout management via a container view and integrates iOS gesture recognition. It in

    Objective-C
    View on GitHub↗6,714
  • software-mansion/react-native-gesture-handlersoftware-mansion avatar

    software-mansion/react-native-gesture-handler

    6,755View on GitHub↗

    React Native Gesture Handler is a declarative library that exposes the platform's native touch and gesture system to React Native, enabling smooth, deterministic gesture handling on the UI thread. It manages gesture recognition through a native state machine with defined transitions between states like BEGAN, ACTIVE, END, and CANCELLED, routing touch events through platform-native gesture recognizers on both iOS and Android. The library provides a comprehensive gesture composition framework that allows developers to combine multiple gestures into race, simultaneous, or exclusive sequences, co

    TypeScriptgesturejavascriptreact-native
    View on GitHub↗6,755
See all 30 alternatives to Snap.js→

Frequently asked questions

What does jakiestfu/snap.js do?

Snap.js is a JavaScript library for building draggable side navigation panels on touch devices. It enables slide-in menus from the left or right screen edge, driven by a gesture-based state machine that interprets drag and flick gestures to open and close the panel.

What are the main features of jakiestfu/snap.js?

The main features of jakiestfu/snap.js are: Side Menu Frameworks, Gesture Menus, Gesture State Machines, Touch Drag Intent Detections, CSS Transform Animations, Side Menu Visibility Toggles, Snap Thresholds, Draggable Panels.

What are some open-source alternatives to jakiestfu/snap.js?

Open-source alternatives to jakiestfu/snap.js include: viewdeck/viewdeck — ViewDeck is a side menu management framework and gesture-based navigation library for iOS. It provides a system for… juliangarnier/anime — This project is a declarative motion framework and JavaScript animation engine designed to transition CSS properties,… software-mansion/react-native-gesture-handler — React Native Gesture Handler is a declarative library that exposes the platform's native touch and gesture system to… mutualmobile/mmdrawercontroller — MMDrawerController is a side drawer navigation controller for mobile applications. It serves as a mobile UI navigation… react-native-community/react-native-modal — This project is a cross-platform UI component for React Native applications that provides a customizable overlay… vpenkov/okaynav — okayNav is a JavaScript library for creating responsive navigation menus that automatically collapse into off-screen…