Skip to content
Snippets Groups Projects
spinner.js 2.39 KiB
Newer Older
Reiter, Christoph's avatar
Reiter, Christoph committed
// 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 {
Reiter, Christoph's avatar
Reiter, Christoph committed
}

#all-spinner {
    width:130px;
Reiter, Christoph's avatar
Reiter, Christoph committed
    height:130px;
    position:relative;
    background-color:transparent;
    margin:0 auto;
.all-box {
    width:50%;
    height:50%;
    /* Use a fallback color, in case this is used standalone */
    background-color:var(--dbp-accent-surface, #9E1E4D);
    position:absolute;
    top:50%;
    left:50%;
    animation-duration: 1.6s;
    animation-direction:alternate-reverse;
    animation-iteration-count:infinite;
Reiter, Christoph's avatar
Reiter, Christoph committed
      animation-name: box1;
}

Reiter, Christoph's avatar
Reiter, Christoph committed
      animation-name: box2;
}

Reiter, Christoph's avatar
Reiter, Christoph committed
      animation-name: box3;
}

@keyframes box1 {
    0% { transform:translateX(-50%) translateY(-50%) rotate(45deg); opacity: 0.5;  }
    30% { transform:translateX(-70%) translateY(-50%) rotate(45deg);  opacity: 0.4; }
    70% { transform:translateX(-70%) translateY(-50%) rotate(45deg);  opacity: 0.5; }
  90%  { transform:translateX(-70%) translateY(-50%) rotate(45deg);  opacity: 0.4; }
  100%  { transform:translateX(-70%) translateY(-50%) rotate(45deg); opacity: 0.5;}
Reiter, Christoph's avatar
Reiter, Christoph committed
}

@keyframes box2 {
    0% { transform:translateX(-50%) translateY(-50%) rotate(45deg); opacity: 0.6; }
    30% { transform:translateX(-50%) translateY(-50%) rotate(45deg); opacity: 0.7;}
    70% { transform:translateX(-50%) translateY(-50%) rotate(45deg); opacity: 0.6;}
  90% { transform:translateX(-50%) translateY(-50%) rotate(45deg); opacity: 0.7;}
  100% { transform:translateX(-50%) translateY(-50%) rotate(45deg);  opacity: 0.6;}
Reiter, Christoph's avatar
Reiter, Christoph committed

}

@keyframes box3 {
    0% { transform:translateX(-50%) translateY(-50%) rotate(45deg);opacity: 0.9;  }
    30% { transform:translateX(-30%) translateY(-50%) rotate(45deg);  opacity: 0.7;}
    70% { transform:translateX(-30%) translateY(-50%) rotate(45deg);  opacity: 0.9;}
  90%  { transform:translateX(-30%) translateY(-50%) rotate(45deg);  opacity: 0.7;}
  100%  { transform:translateX(-30%) translateY(-50%) rotate(45deg); opacity: 0.9;}
Reiter, Christoph's avatar
Reiter, Christoph committed
}
</style>

<div id="all-spinner">
  <div id="box-1" class="all-box"></div>
  <div id="box-2" class="all-box"></div>
  <div id="box-3" class="all-box"></div>
Reiter, Christoph's avatar
Reiter, Christoph committed
</div>`;
    }