-
Reiter, Christoph authoredReiter, Christoph authored
spinner.js 3.96 KiB
// Note: This doesn't have a lit-element dependency on purpose, so it can be loaded faster before
// other web components (assuming it's not bundled)
export class Spinner extends HTMLElement {
constructor() {
super();
let shadowRoot = this.attachShadow({mode: 'open'});
shadowRoot.innerHTML = `
<style>
:host {
display: block;
}
#all-spinner-tuglogo {
width:130px;
height:130px;
position:relative;
background-color:transparent;
margin:0 auto;
}
.all-spinner-tuglogo-box {
width:20%;
height:20%;
background-color:#e4154b;
position:absolute;
top:50%;
left:50%;
animation-duration: 1.6s;
animation-direction:alternate;
animation-iteration-count:infinite;
animation-fill-mode:both;
animation-timing-function:ease;
transition: transform 0.5s, background-color 0.2s 0.5s;
}
#all-spinner-tuglogo-box-1 {
animation-name: box1;
transform:translateX(-160%) translateY(-50%);
}
#all-spinner-tuglogo-box-2 {
transform-origin:0 0;
animation-name: box2;
transform:scale(1) translateX(-50%) translateY(-50%);
}
#all-spinner-tuglogo-box-3 {
animation-name: box3;
animation-delay:0.3s;
transform:translateX(60%) translateY(-50%); visibility:visible;
}
#all-spinner-tuglogo-box-4 {
animation-name: box4;
animation-delay:0.1s;
transform:translateX(0%) translateY(-100%); visibility:visible;
}
#all-spinner-tuglogo-box-5 {
animation-name: box5;
animation-delay:0.2s;
transform:translateX(-100%) translateY(0%); visibility:visible;
}
@keyframes box1 {
0% { transform:translateX(-50%) translateY(-50%); visibility:hidden; }
50% { transform:translateX(-50%) translateY(-50%); visibility:hidden; }
70% { transform:translateX(-170%) translateY(-50%); visibility:visible;}
80% { transform:translateX(-160%) translateY(-50%); visibility:visible;}
100% { transform:translateX(-160%) translateY(-50%); visibility:visible;}
}
@keyframes box2 {
0% { transform:scale(0) translateX(-50%) translateY(-50%);}
5% { transform:scale(0) translateX(-50%) translateY(-50%);}
30% { transform:scale(1.2) translateX(-50%) translateY(-50%);}
35% { transform:scale(1) translateX(-50%) translateY(-50%);}
100% { transform:scale(1) translateX(-50%) translateY(-50%);}
}
@keyframes box3 {
0% { transform:translateX(-50%) translateY(-50%); visibility:hidden; }
50% { transform:translateX(-50%) translateY(-50%); visibility:hidden; }
70% { transform:translateX(70%) translateY(-50%); visibility:visible;}
80% { transform:translateX(60%) translateY(-50%); visibility:visible;}
100% { transform:translateX(60%) translateY(-50%); visibility:visible;}
}
@keyframes box4 {
0% { transform:translateX(-50%) translateY(-50%); visibility:hidden; }
50% { transform:translateX(-50%) translateY(-50%); visibility:hidden; }
70% { transform:translateX(10%) translateY(-110%); visibility:visible;}
80% { transform:translateX(0%) translateY(-100%); visibility:visible;}
100% { transform:translateX(0%) translateY(-100%); visibility:visible;}
}
@keyframes box5 {
0% { transform:translateX(-50%) translateY(-50%); visibility:hidden; }
50% { transform:translateX(-50%) translateY(-50%); visibility:hidden; }
70% { transform:translateX(-110%) translateY(10%); visibility:visible;}
80% { transform:translateX(-100%) translateY(0%); visibility:visible;}
100% { transform:translateX(-100%) translateY(0%); visibility:visible;}
}
</style>
<div id="all-spinner-tuglogo">
<div id="all-spinner-tuglogo-box-1" class="all-spinner-tuglogo-box"></div>
<div id="all-spinner-tuglogo-box-2" class="all-spinner-tuglogo-box"></div>
<div id="all-spinner-tuglogo-box-3" class="all-spinner-tuglogo-box"></div>
<div id="all-spinner-tuglogo-box-4" class="all-spinner-tuglogo-box"></div>
<div id="all-spinner-tuglogo-box-5" class="all-spinner-tuglogo-box"></div>
</div>`;
}
}