| <script setup lang="ts"> |
| import {ref} from "vue"; |
| |
| const props = withDefaults(defineProps<{ |
| isButton? : boolean; |
| color? : string; |
| }>(), { |
| isButton: false, |
| color: '#fff', |
| }); |
| |
| const currColor = ref(props.color); |
| |
| </script> |
|
|
| <template> |
| <template v-if="isButton"> |
| <div class="button-loader" /> |
| </template> |
| <template v-else> |
| <div class="section-loader" /> |
| </template> |
| </template> |
|
|
| <style lang="scss" scoped> |
| @import '@plugin/assets/_variables_override.scss'; |
| |
| .button-loader { |
| width: 16px; |
| height: 16px; |
| border-radius: 20px; |
| border: 2px solid v-bind(color); |
| border-bottom-color: transparent; |
| display: inline-block; |
| box-sizing: border-box; |
| animation: rotation 1s linear infinite; |
| |
| @keyframes rotation { |
| 0% { |
| transform: rotate(0deg); |
| } |
| 100% { |
| transform: rotate(360deg); |
| } |
| } |
| } |
| |
| .section-loader { |
| position: relative; |
| width: 100px; |
| height: 50px; |
| margin-inline: auto; |
| background-repeat: no-repeat; |
| background-image: linear-gradient(v-bind(color) 50px, transparent 0), |
| linear-gradient(v-bind(color) 50px, transparent 0), |
| linear-gradient(v-bind(color) 50px, transparent 0), |
| linear-gradient(v-bind(color) 50px, transparent 0), |
| linear-gradient(v-bind(color) 50px, transparent 0), |
| linear-gradient(v-bind(color) 50px, transparent 0); |
| background-position: 0px center, 15px center, 30px center, 45px center, 60px center, 75px center, 90px center; |
| animation: rikSpikeRoll 0.65s linear infinite alternate; |
| |
| @keyframes rikSpikeRoll { |
| 0% { background-size: 10px 3px;} |
| 16% { background-size: 10px 50px, 10px 3px, 10px 3px, 10px 3px, 10px 3px, 10px 3px} |
| 33% { background-size: 10px 30px, 10px 50px, 10px 3px, 10px 3px, 10px 3px, 10px 3px} |
| 50% { background-size: 10px 10px, 10px 30px, 10px 50px, 10px 3px, 10px 3px, 10px 3px} |
| 66% { background-size: 10px 3px, 10px 10px, 10px 30px, 10px 50px, 10px 3px, 10px 3px} |
| 83% { background-size: 10px 3px, 10px 3px, 10px 10px, 10px 30px, 10px 50px, 10px 3px} |
| 100% { background-size: 10px 3px, 10px 3px, 10px 3px, 10px 10px, 10px 30px, 10px 50px} |
| } |
| } |
| </style> |