Animations
JavaScript animation components for content reveal, countdowns, preloaders, and progress bars.
Content Revealer
Reveals content with fade-in effects. Supports scroll-triggered reveal via IntersectionObserver.
This content fades in when the page loads.
This content fades in after 300ms.
Scroll to Reveal
This content appears when scrolled into view.
HTML
<!-- Basic reveal on page load -->
<div
data-ss="reveal"
data-ss-reveal-delay="0"
data-ss-reveal-duration="500"
>
<p>This content fades in when the page loads.</p>
</div>
<!-- Reveal with delay -->
<div
data-ss="reveal"
data-ss-reveal-delay="300"
data-ss-reveal-duration="500"
>
<p>This content fades in after 300ms.</p>
</div>
<!-- Scroll-triggered reveal -->
<div
data-ss="reveal"
data-ss-reveal-on-scroll="true"
data-ss-reveal-duration="600"
>
<div
style="
padding: 40px;
background: var(--color_fill_secondary);
border-radius: 12px;
text-align: center;
"
>
<h4>Scroll to Reveal</h4>
<p>This content appears when scrolled into view.</p>
</div>
</div>
Countdown Timer
Displays countdown to a target date/time with customizable format.
00
00
00
00
00
Days
00
Hours
00
Minutes
00
Seconds
HTML
<!-- Countdown to a specific date -->
<div
data-ss="countdown"
data-ss-countdown-end-time="2026-12-31T00:00:00"
data-ss-countdown-format="DD:HH:MM:SS"
data-ss-countdown-complete-text="Happy New Year!"
style="
display: flex;
gap: 16px;
justify-content: center;
font-size: 24px;
font-weight: 600;
"
>
<span
class="ss-c-countdown-days"
style="
padding: 16px 24px;
background: var(--color_fill_primary);
color: white;
border-radius: 8px;
"
>
00
</span>
<span
class="ss-c-countdown-hours"
style="
padding: 16px 24px;
background: var(--color_fill_primary);
color: white;
border-radius: 8px;
"
>
00
</span>
<span
class="ss-c-countdown-minutes"
style="
padding: 16px 24px;
background: var(--color_fill_primary);
color: white;
border-radius: 8px;
"
>
00
</span>
<span
class="ss-c-countdown-seconds"
style="
padding: 16px 24px;
background: var(--color_fill_primary);
color: white;
border-radius: 8px;
"
>
00
</span>
</div>
<!-- Countdown with labels -->
<div
data-ss="countdown"
data-ss-countdown-end-time="2026-06-15T09:00:00"
style="
display: flex;
gap: 24px;
justify-content: center;
text-align: center;
"
>
<div>
<div
class="ss-c-countdown-days"
style="
font-size: 48px;
font-weight: 700;
color: var(--color_fill_primary);
"
>
00
</div>
<div
style="
font-size: 12px;
text-transform: uppercase;
opacity: 0.7;
"
>
Days
</div>
</div>
<div>
<div
class="ss-c-countdown-hours"
style="
font-size: 48px;
font-weight: 700;
color: var(--color_fill_primary);
"
>
00
</div>
<div
style="
font-size: 12px;
text-transform: uppercase;
opacity: 0.7;
"
>
Hours
</div>
</div>
<div>
<div
class="ss-c-countdown-minutes"
style="
font-size: 48px;
font-weight: 700;
color: var(--color_fill_primary);
"
>
00
</div>
<div
style="
font-size: 12px;
text-transform: uppercase;
opacity: 0.7;
"
>
Minutes
</div>
</div>
<div>
<div
class="ss-c-countdown-seconds"
style="
font-size: 48px;
font-weight: 700;
color: var(--color_fill_primary);
"
>
00
</div>
<div
style="
font-size: 12px;
text-transform: uppercase;
opacity: 0.7;
"
>
Seconds
</div>
</div>
</div>
Preloader
Manages a preloader element during page load with automatic hiding.
Loading...
HTML
<!-- Preloader overlay -->
<div
class="ss-c-preloader"
data-ss="preloader"
data-ss-preloader-timeout="500"
data-ss-preloader-min-display="300"
style="
position: fixed;
inset: 0;
background: rgba(255, 255, 255, 0.95);
display: flex;
align-items: center;
justify-content: center;
z-index: 9999;
"
>
<div class="ss-c-preloader__content" style="text-align: center">
<div
class="ss-c-preloader__spinner"
style="
width: 48px;
height: 48px;
border: 4px solid var(--color_fill_secondary);
border-top-color: var(--color_fill_primary);
border-radius: 50%;
animation: spin 1s linear infinite;
"
></div>
<p style="margin-top: 16px; opacity: 0.7">Loading...</p>
</div>
</div>
<!-- Preloader with logo -->
<div
class="ss-c-preloader"
data-ss="preloader"
data-ss-preloader-timeout="1000"
style="
position: fixed;
inset: 0;
background: var(--color_fill_primary);
display: flex;
align-items: center;
justify-content: center;
z-index: 9999;
"
>
<div style="text-align: center; color: white">
<svg
width="64"
height="64"
viewBox="0 0 24 24"
fill="currentColor"
>
<path
d="M12 2L2 7l10 5 10-5-10-5zM2 17l10 5 10-5M2 12l10 5 10-5"
/>
</svg>
<div
style="
margin-top: 24px;
width: 120px;
height: 4px;
background: rgba(255, 255, 255, 0.3);
border-radius: 2px;
overflow: hidden;
"
>
<div
style="
width: 60%;
height: 100%;
background: white;
animation: loading 1.5s ease-in-out infinite;
"
></div>
</div>
</div>
</div>
Progress Bar Manager
Controls progress bar UI with animation support.
Upload Progress
45%
HTML
<!-- Basic animated progress -->
<div
data-ss="progress"
data-ss-progress-value="75"
data-ss-progress-animate="true"
data-ss-progress-duration="1000"
style="
height: 8px;
background: var(--color_fill_secondary);
border-radius: 4px;
overflow: hidden;
"
>
<div
class="ss-c-progress__bar"
style="
height: 100%;
width: 0%;
background: var(--color_fill_primary);
transition: width 1s ease;
"
></div>
</div>
<!-- Progress with label -->
<div style="margin-top: 24px">
<div
style="
display: flex;
justify-content: space-between;
margin-bottom: 8px;
"
>
<span>Upload Progress</span>
<span class="ss-c-progress__value">45%</span>
</div>
<div
data-ss="progress"
data-ss-progress-value="45"
data-ss-progress-animate="true"
style="
height: 12px;
background: var(--color_fill_secondary);
border-radius: 6px;
overflow: hidden;
"
>
<div
class="ss-c-progress__bar"
style="
height: 100%;
width: 0%;
background: linear-gradient(
90deg,
var(--color_fill_primary),
#764ba2
);
"
></div>
</div>
</div>
<!-- Segmented progress -->
<div style="margin-top: 24px; display: flex; gap: 4px">
<div
data-ss="progress"
data-ss-progress-value="100"
style="
flex: 1;
height: 8px;
background: var(--color_fill_secondary);
border-radius: 4px;
overflow: hidden;
"
>
<div
class="ss-c-progress__bar"
style="
height: 100%;
width: 0%;
background: var(--color_state_success);
"
></div>
</div>
<div
data-ss="progress"
data-ss-progress-value="100"
style="
flex: 1;
height: 8px;
background: var(--color_fill_secondary);
border-radius: 4px;
overflow: hidden;
"
>
<div
class="ss-c-progress__bar"
style="
height: 100%;
width: 0%;
background: var(--color_state_success);
"
></div>
</div>
<div
data-ss="progress"
data-ss-progress-value="60"
style="
flex: 1;
height: 8px;
background: var(--color_fill_secondary);
border-radius: 4px;
overflow: hidden;
"
>
<div
class="ss-c-progress__bar"
style="
height: 100%;
width: 0%;
background: var(--color_state_warning);
"
></div>
</div>
<div
data-ss="progress"
data-ss-progress-value="0"
style="
flex: 1;
height: 8px;
background: var(--color_fill_secondary);
border-radius: 4px;
overflow: hidden;
"
>
<div
class="ss-c-progress__bar"
style="
height: 100%;
width: 0%;
background: var(--color_fill_primary);
"
></div>
</div>
</div>
JavaScript API
Programmatic control of animation components.
JavaScript
<script>
// ContentRevealer - Programmatic reveal
import { ContentRevealer } from "stylescape";
const revealer = new ContentRevealer(element, {
delay: 300,
duration: 500,
onScroll: true,
});
revealer.reveal(); // Trigger reveal manually
// CountdownTimer - Dynamic countdown
import { CountdownTimer } from "stylescape";
const countdown = new CountdownTimer(element, {
endTime: new Date("2026-12-31"),
format: "DD:HH:MM:SS",
onComplete: () => console.log("Countdown finished!"),
});
countdown.start();
countdown.pause();
countdown.reset();
// ProgressBarManager - Update progress
import { ProgressBarManager } from "stylescape";
const progress = new ProgressBarManager(element, {
value: 0,
animate: true,
duration: 500,
});
progress.setValue(75); // Animate to 75%
progress.increment(10); // Add 10%
</script>