48 lines
1.0 KiB
JavaScript
48 lines
1.0 KiB
JavaScript
const spinner = document.createElement('template');
|
|
spinner.innerHTML = `
|
|
<style>
|
|
*{
|
|
padding: 0;
|
|
margin: 0;
|
|
-webkit-box-sizing: border-box;
|
|
box-sizing: border-box;
|
|
}
|
|
.loader {
|
|
display: flex;
|
|
height: var(--size, 1.5rem);
|
|
width: var(--size, 1.5rem);
|
|
stroke-width: 8;
|
|
overflow: visible;
|
|
stroke: var(--accent-color, teal);
|
|
fill: none;
|
|
stroke-dashoffset: 180;
|
|
stroke-dasharray: 180;
|
|
animation: load 2s infinite, spin 1s linear infinite;
|
|
}
|
|
@keyframes load {
|
|
50% {
|
|
stroke-dashoffset: 0;
|
|
}
|
|
100%{
|
|
stroke-dashoffset: -180;
|
|
}
|
|
}
|
|
|
|
@keyframes spin {
|
|
100% {
|
|
transform: rotate(360deg);
|
|
}
|
|
}
|
|
</style>
|
|
<svg viewBox="0 0 64 64" class="loader"><circle cx="32" cy="32" r="32" /></svg>
|
|
|
|
`;
|
|
class SpinnerLoader extends HTMLElement {
|
|
constructor() {
|
|
super();
|
|
this.attachShadow({
|
|
mode: 'open'
|
|
}).append(spinner.content.cloneNode(true));
|
|
}
|
|
}
|
|
window.customElements.define('sm-spinner', SpinnerLoader); |