forked from Schum123/svelte-loading-spinners
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathStretch.svelte
49 lines (46 loc) · 1.19 KB
/
Stretch.svelte
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
<script lang="ts">
import type { SpinnerTypes } from "./types/spinner.type";
import { range, durationUnitRegex } from "./utils";
export let color: SpinnerTypes["color"] = "#FF3E00";
export let unit: SpinnerTypes["unit"] = "px";
export let duration: SpinnerTypes["duration"] = "1.2s";
export let size: SpinnerTypes["size"] = "60";
let durationUnit = duration.match(durationUnitRegex)[0];
let durationNum = duration.replace(durationUnitRegex, "");
</script>
<style>
.wrapper {
height: var(--size);
width: var(--size);
display: inline-block;
text-align: center;
font-size: 10px;
}
.rect {
height: 100%;
width: 10%;
display: inline-block;
margin-right: 4px;
background-color: var(--color);
animation: stretch var(--duration) ease-in-out infinite;
}
@keyframes stretch {
0%,
40%,
100% {
transform: scaleY(0.4);
}
20% {
transform: scaleY(1);
}
}
</style>
<div
class="wrapper"
style="--size: {size}{unit}; --color: {color}; --duration: {duration}">
{#each range(5, 1) as version}
<div
class="rect"
style="animation-delay: {(version - 1) * (+durationNum / 12)}{durationUnit}" />
{/each}
</div>