blob: c792d8787ff3c95e82e04f053f3e042f45bc344f [file] [log] [blame]
<script lang="ts">
import { onNavigate } from '$app/navigation';
import { Tween } from 'svelte/motion';
import { cubicInOut } from 'svelte/easing';
const progress = new Tween(0);
const opacity = new Tween(0);
let timer = $state<ReturnType<typeof setInterval>>();
async function start() {
clearInterval(timer);
await progress.set(0, { duration: 0 });
await opacity.set(1, { duration: 0 });
await progress.set(16, { duration: 250, easing: cubicInOut });
timer = setInterval(() => {
progress.set(
progress.current < 90
? progress.current + Math.floor(Math.random() * (10 - 4 + 1) + 4)
: progress.current,
{
duration: 300,
easing: cubicInOut
}
);
}, 550);
}
async function stop() {
await progress.set(100, { duration: 100, easing: cubicInOut });
await opacity.set(0, { duration: 200, delay: 300 });
}
onNavigate(() => {
start();
return () => {
stop();
};
});
</script>
<div class="fixed left-0 right-0 top-0 pointer-events-none z-999">
<div
class="bg-green500 h-[2px]"
style="width: {progress.current}%; opacity:{opacity.current};"
></div>
</div>