move.gl
Version:
Motion and Animation Library for Stylescape.
517 lines (464 loc) • 19.3 kB
HTML
<html lang="en" data-theme="light">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description"
content="Motion and Animation Library — CSS animations, transitions, keyframes, and interactive motion effects." />
<meta name="theme-color" content="#ffffff" media="(prefers-color-scheme: light)" />
<meta name="theme-color" content="#000000" media="(prefers-color-scheme: dark)" />
<title>move.gl</title>
<!-- Library CSS -->
<link rel="stylesheet" href="/css/move.gl.css" />
<!-- Documentation CSS -->
<link rel="stylesheet" href="/css/move.gl.docs.css" />
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link
href="https://fonts.googleapis.com/css2?family=Inter:wght@300;400;500;600;700&family=JetBrains+Mono:wght@400;500&display=swap"
rel="stylesheet">
</head>
<body class="">
<div class="nav-wrapper">
<nav class="nav">
<div class="nav__inner">
<a href="index.html" class="nav__logo">
<span class="nav__logo-text">move.gl</span>
<span class="nav__version">v0.0.1</span>
</a>
<div class="nav__right">
<button type="button" class="theme-toggle" data-toggle="theme" title="Toggle dark mode" aria-label="Toggle dark mode">
<svg class="theme-icon theme-icon--light" width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
<path
d="M8 12a4 4 0 100-8 4 4 0 000 8zM8 0a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0V.75A.75.75 0 018 0zm0 13a.75.75 0 01.75.75v1.5a.75.75 0 01-1.5 0v-1.5A.75.75 0 018 13zm7-5a.75.75 0 00-.75-.75h-1.5a.75.75 0 000 1.5h1.5A.75.75 0 0015 8zM3 8a.75.75 0 00-.75-.75H.75a.75.75 0 000 1.5h1.5A.75.75 0 003 8zm9.536-4.536a.75.75 0 00-1.06 0l-1.061 1.06a.75.75 0 001.06 1.061l1.061-1.06a.75.75 0 000-1.061zm-9.072 9.072a.75.75 0 00-1.06 0l-1.061 1.06a.75.75 0 101.06 1.061l1.061-1.06a.75.75 0 000-1.061zm9.072 0a.75.75 0 00-1.06 1.06l1.06 1.061a.75.75 0 101.061-1.06l-1.06-1.061zm-9.072-9.072a.75.75 0 00-1.06 1.06l1.06 1.061a.75.75 0 001.061-1.06l-1.06-1.061z" />
</svg>
<svg class="theme-icon theme-icon--dark" width="16" height="16" viewBox="0 0 16 16" fill="currentColor">
<path d="M6.2 1A6.98 6.98 0 008 7a6.98 6.98 0 00-1.8 6A7 7 0 116.2 1z" />
</svg>
</button>
<div class="nav__dropdown" id="nav-dropdown">
<button type="button" class="nav__dropdown-toggle" aria-expanded="false" aria-haspopup="true">
<span>Docs</span>
<svg width="10" height="6" viewBox="0 0 10 6" fill="none" stroke="currentColor"
stroke-width="1.5">
<path d="M1 1l4 4 4-4" />
</svg>
</button>
<div class="nav__dropdown-menu" role="menu">
<div class="nav__dropdown-section">
<span class="nav__dropdown-label">Learn</span>
<a href="getting-started.html" role="menuitem">Getting Started</a>
<a href="core-concepts.html" role="menuitem">Core Concepts</a>
</div>
<div class="nav__dropdown-section">
<span class="nav__dropdown-label">Overview</span>
<a href="test_overview.html" role="menuitem">All Animations</a>
</div>
<div class="nav__dropdown-section">
<span class="nav__dropdown-label">Animations</span>
<a href="test_fade.html" role="menuitem">Fade</a>
<a href="test_slide.html" role="menuitem">Slide</a>
<a href="test_bounce.html" role="menuitem">Bounce</a>
<a href="test_zoom.html" role="menuitem">Zoom</a>
<a href="test_flip.html" role="menuitem">Flip</a>
<a href="test_scale.html" role="menuitem">Scale</a>
<a href="test_spin.html" role="menuitem">Spin & Rotate</a>
<a href="test_pulse.html" role="menuitem">Pulse</a>
<a href="test_shake.html" role="menuitem">Shake & Wobble</a>
<a href="test_attention.html" role="menuitem">Attention</a>
<a href="test_special.html" role="menuitem">Special Effects</a>
</div>
<div class="nav__dropdown-section">
<span class="nav__dropdown-label">Effects</span>
<a href="test_loaders.html" role="menuitem">Loaders</a>
<a href="test_transitions.html" role="menuitem">Transitions</a>
<a href="test_transforms.html" role="menuitem">Transforms</a>
<a href="test_effects.html" role="menuitem">Filter Effects</a>
<a href="test_keyframes.html" role="menuitem">Keyframes</a>
<a href="test_mouse.html" role="menuitem">Mouse Interactions</a>
</div>
<div class="nav__dropdown-section">
<span class="nav__dropdown-label">TypeScript Demos</span>
<a href="demo_draggable.html" role="menuitem">Draggable</a>
<a href="demo_gesture.html" role="menuitem">Gesture Handler</a>
<a href="demo_keyboard.html" role="menuitem">Virtual Keyboard</a>
<a href="demo_screensaver.html" role="menuitem">Screensaver</a>
<a href="demo_video_overlay.html" role="menuitem">Video Overlay</a>
</div>
</div>
</div>
<a href="https://github.com/stylescape/move.gl" class="nav__github" target="_blank"
title="View on GitHub">
<svg width="18" height="18" viewBox="0 0 16 16" fill="currentColor">
<path
d="M8 0C3.58 0 0 3.58 0 8c0 3.54 2.29 6.53 5.47 7.59.4.07.55-.17.55-.38 0-.19-.01-.82-.01-1.49-2.01.37-2.53-.49-2.69-.94-.09-.23-.48-.94-.82-1.13-.28-.15-.68-.52-.01-.53.63-.01 1.08.58 1.23.82.72 1.21 1.87.87 2.33.66.07-.52.28-.87.51-1.07-1.78-.2-3.64-.89-3.64-3.95 0-.87.31-1.59.82-2.15-.08-.2-.36-1.02.08-2.12 0 0 .67-.21 2.2.82.64-.18 1.32-.27 2-.27.68 0 1.36.09 2 .27 1.53-1.04 2.2-.82 2.2-.82.44 1.1.16 1.92.08 2.12.51.56.82 1.27.82 2.15 0 3.07-1.87 3.75-3.65 3.95.29.25.54.73.54 1.48 0 1.07-.01 1.93-.01 2.2 0 .21.15.46.55.38A8.013 8.013 0 0016 8c0-4.42-3.58-8-8-8z" />
</svg>
</a>
</div>
</div>
</nav>
</div>
<div class="container">
<header class="header"><p class="eyebrow">Mixins</p>
<h1>Mouse Interactions</h1> </header>
<main>
<section>
<h2>Cursor Styles</h2>
<p>Hover over each box to see the cursor change.</p>
<div class="demo-row">
<div class="demo-item">
<div class="mouse-box cursor--default">Default</div>
<p>default</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--pointer">Pointer</div>
<p>pointer</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--text">Text</div>
<p>text</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--move">Move</div>
<p>move</p>
</div>
</div>
<div class="demo-row">
<div class="demo-item">
<div class="mouse-box cursor--grab">Grab</div>
<p>grab</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--grabbing">Grabbing</div>
<p>grabbing</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--not-allowed">Not Allowed</div>
<p>not-allowed</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--wait">Wait</div>
<p>wait</p>
</div>
</div>
<div class="demo-row">
<div class="demo-item">
<div class="mouse-box cursor--help">Help</div>
<p>help</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--crosshair">Crosshair</div>
<p>crosshair</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--zoom-in">Zoom In</div>
<p>zoom-in</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--zoom-out">Zoom Out</div>
<p>zoom-out</p>
</div>
</div>
</section>
<section>
<h2>Resize Cursors</h2>
<p>Directional resize cursors.</p>
<div class="demo-row">
<div class="demo-item">
<div class="mouse-box cursor--n-resize">↑</div>
<p>n-resize</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--e-resize">→</div>
<p>e-resize</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--s-resize">↓</div>
<p>s-resize</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--w-resize">←</div>
<p>w-resize</p>
</div>
</div>
<div class="demo-row">
<div class="demo-item">
<div class="mouse-box cursor--ne-resize">↗</div>
<p>ne-resize</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--se-resize">↘</div>
<p>se-resize</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--sw-resize">↙</div>
<p>sw-resize</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--nw-resize">↖</div>
<p>nw-resize</p>
</div>
</div>
<div class="demo-row">
<div class="demo-item">
<div class="mouse-box cursor--ew-resize">↔</div>
<p>ew-resize</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--ns-resize">↕</div>
<p>ns-resize</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--col-resize">‖</div>
<p>col-resize</p>
</div>
<div class="demo-item">
<div class="mouse-box cursor--row-resize">═</div>
<p>row-resize</p>
</div>
</div>
</section>
<section>
<h2>Hover Effects</h2>
<p>Interactive hover transitions.</p>
<div class="demo-row">
<div class="demo-item">
<div class="mouse-box hover--scale">Scale</div>
<p>hover-scale</p>
</div>
<div class="demo-item">
<div class="mouse-box hover--lift">Lift</div>
<p>hover-lift</p>
</div>
<div class="demo-item">
<div class="mouse-box hover--glow">Glow</div>
<p>hover-glow</p>
</div>
<div class="demo-item">
<div class="mouse-box hover--shadow">Shadow</div>
<p>hover-shadow</p>
</div>
</div>
<div class="demo-row">
<div class="demo-item">
<div class="mouse-box hover--brighten">Brighten</div>
<p>hover-brighten</p>
</div>
<div class="demo-item">
<div class="mouse-box hover--darken">Darken</div>
<p>hover-darken</p>
</div>
<div class="demo-item">
<div class="mouse-box hover--rotate">Rotate</div>
<p>hover-rotate</p>
</div>
<div class="demo-item">
<div class="mouse-box hover--shake">Shake</div>
<p>hover-shake</p>
</div>
</div>
</section>
<section>
<h2>Pointer Events</h2>
<p>Control element interactivity.</p>
<div class="demo-row">
<div class="demo-item">
<div class="mouse-box pointer--auto">Auto</div>
<p>pointer-auto</p>
</div>
<div class="demo-item">
<div class="mouse-box pointer--none">None (click through)</div>
<p>pointer-none</p>
</div>
</div>
</section>
<section>
<h2>Text Selection</h2>
<p>Try selecting the text in each box.</p>
<div class="demo-row">
<div class="demo-item">
<div class="mouse-box selection--default">Select this text normally</div>
<p>default selection</p>
</div>
<div class="demo-item">
<div class="mouse-box selection--none">You cannot select this</div>
<p>user-select: none</p>
</div>
<div class="demo-item">
<div class="mouse-box selection--all">Click to select all</div>
<p>user-select: all</p>
</div>
<div class="demo-item">
<div class="mouse-box selection--custom">Custom selection color</div>
<p>custom ::selection</p>
</div>
</div>
</section>
<section>
<h2>Scroll Behavior</h2>
<p>Scrollable containers with different behaviors.</p>
<div class="demo-row">
<div class="demo-item scroll-demo">
<div class="scroll-container scroll--smooth">
<div class="scroll-content">
<p>Smooth scrolling enabled</p>
<p>Scroll down...</p>
<p>Keep scrolling...</p>
<p>More content...</p>
<p>Almost there...</p>
<p>End of content</p>
</div>
</div>
<p>smooth scroll</p>
</div>
<div class="demo-item scroll-demo">
<div class="scroll-container scroll--snap">
<div class="scroll-snap-item">Snap 1</div>
<div class="scroll-snap-item">Snap 2</div>
<div class="scroll-snap-item">Snap 3</div>
</div>
<p>scroll snap</p>
</div>
</div>
</section>
<section>
<h2>Custom Scrollbar</h2>
<p>Styled scrollbar appearance.</p>
<div class="demo-row">
<div class="demo-item scroll-demo">
<div class="scroll-container scrollbar--custom">
<div class="scroll-content">
<p>Custom styled scrollbar</p>
<p>Scroll to see...</p>
<p>Notice the thin bar...</p>
<p>Custom track color...</p>
<p>Custom thumb style...</p>
<p>End of content</p>
</div>
</div>
<p>custom scrollbar</p>
</div>
<div class="demo-item scroll-demo">
<div class="scroll-container scrollbar--hidden">
<div class="scroll-content">
<p>Hidden scrollbar</p>
<p>But still scrollable...</p>
<p>Keep scrolling...</p>
<p>No visible bar...</p>
<p>Clean look...</p>
<p>End of content</p>
</div>
</div>
<p>hidden scrollbar</p>
</div>
</div>
</section>
<section>
<h2>Touch Interactions</h2>
<p>Touch-optimized interaction styles.</p>
<div class="demo-row">
<div class="demo-item">
<div class="mouse-box touch--target">Touch Target (44px min)</div>
<p>touch-target</p>
</div>
<div class="demo-item">
<div class="mouse-box touch--feedback">Tap for Feedback</div>
<p>touch-feedback</p>
</div>
<div class="demo-item">
<div class="mouse-box touch--scroll">Touch Scroll</div>
<p>touch-scroll</p>
</div>
</div>
</section>
<section>
<h2>Focus States</h2>
<p>Tab through to see focus styles.</p>
<div class="demo-row">
<div class="demo-item">
<button class="mouse-box focus--default" tabindex="0">Default Focus</button>
<p>default focus</p>
</div>
<div class="demo-item">
<button class="mouse-box focus--ring" tabindex="0">Focus Ring</button>
<p>focus-ring</p>
</div>
<div class="demo-item">
<button class="mouse-box focus--glow" tabindex="0">Focus Glow</button>
<p>focus-glow</p>
</div>
<div class="demo-item">
<button class="mouse-box focus--outline" tabindex="0">Focus Outline</button>
<p>focus-outline</p>
</div>
</div>
</section>
<section>
<h2>Usage</h2>
<div class="code-block"><span class="comment">// Cursor Mixins</span>
.button {
@include cursor_pointer;
}
.draggable {
@include cursor_grab;
&:active {
@include cursor_grabbing;
}
}
<span class="comment">// Custom cursor</span>
.custom {
@include cursor_custom('path/to/cursor.png', 'pointer');
}
<span class="comment">// Hover Effects</span>
.card {
@include hover_scale(1.05, 0.3s);
}
.interactive {
@include hover_transition(background-color, 0.2s, ease-in-out) {
background-color: lighten($primary, 10%);
}
}
<span class="comment">// Pointer Events</span>
.overlay {
@include pointer_events(none);
}
<span class="comment">// Text Selection</span>
.no-select {
user-select: none;
}
body {
@include custom-selection(#3b82f6, #ffffff);
}
<span class="comment">// Scroll Behavior</span>
.container {
@include scroll_smooth(true, true);
}
.carousel {
@include scroll_snap('x mandatory', 'center');
}
</div>
</section> </main>
<footer class="footer">
<div class="footer__content">
<div class="footer__left">
<span class="footer__brand">move.gl</span>
<span class="footer__tagline">Motion & Animation Library</span>
</div>
<div class="footer__right">
<div class="footer__links">
<a href="https://github.com/stylescape/move.gl" class="footer__link" target="_blank">GitHub</a>
<a href="https://www.npmjs.com/package/move.gl" class="footer__link" target="_blank">npm</a>
<a href="https://www.scape.agency" class="footer__link" target="_blank">Scape Agency</a>
</div>
<span class="footer__copyright">© 2024 Scape Agency. MIT License.</span>
</div>
</div>
</footer>
</div>
<!-- Library JS -->
<script type="module" src="/js/move.gl.js"></script>
<!-- Demo Scripts -->
<script type="module" src="/js/demo.js"></script>
</body>
</html>