vue3-uikit
138 строк · 2.8 Кб
1<template>
2<div>
3<!-- Линейный прогресс-бар -->
4<div class="progress-wrapper">
5<h3>Linear Progress</h3>
6<div class="progress-bar">
7<div class="progress" :style="{ width: linearProgress + '%' }"></div>
8</div>
9</div>
10
11<!-- Круговой прогресс-бар -->
12<div class="progress-wrapper">
13<h3>Circular Progress</h3>
14<div class="circular-progress">
15<svg viewBox="0 0 36 36" class="circular-chart">
16<path
17class="circle"
18:stroke-dasharray="circularProgress + ', 100'"
19d="M18 2.0845
20a 15.9155 15.9155 0 0 1 0 31.831
21a 15.9155 15.9155 0 0 1 0 -31.831"
22/>
23</svg>
24<span class="circular-progress-value">{{ circularProgress }}%</span>
25</div>
26</div>
27
28<!-- Загрузочный прогресс-бар -->
29<div class="progress-wrapper">
30<h3>Loader Progress</h3>
31<div class="loader"></div>
32</div>
33</div>
34</template>
35
36<script>
37import { ref, onMounted } from "vue";
38
39export default {
40name: "Progress",
41setup() {
42const linearProgress = ref(0);
43const circularProgress = ref(0);
44
45const simulateProgress = () => {
46if (linearProgress.value < 100) {
47linearProgress.value += 1;
48circularProgress.value += 1;
49} else {
50linearProgress.value = 0;
51circularProgress.value = 0;
52}
53};
54
55onMounted(() => {
56setInterval(simulateProgress, 100);
57});
58
59return {
60linearProgress,
61circularProgress,
62};
63},
64};
65</script>
66
67<style scoped>
68
69.progress-wrapper {
70margin-bottom: 30px;
71}
72
73/* Линейный прогресс-бар */
74.progress-bar {
75width: 100%;
76height: 20px;
77background-color: #e0e0e0;
78border-radius: 10px;
79overflow: hidden;
80}
81
82.progress {
83height: 100%;
84background-color: #6200ea;
85border-radius: 10px 0 0 10px;
86transition: width 0.3s ease;
87}
88
89/* Круговой прогресс-бар */
90.circular-progress {
91position: relative;
92width: 100px;
93height: 100px;
94}
95
96.circular-chart {
97display: block;
98margin: 10px auto;
99max-width: 100%;
100max-height: 250px;
101}
102
103.circle {
104fill: none;
105stroke-width: 2.8;
106stroke: #6200ea;
107stroke-linecap: round;
108transition: stroke-dasharray 0.3s ease;
109}
110
111.circular-progress-value {
112font-size: 1.2rem;
113font-weight: bold;
114position: absolute;
115top: 50%;
116left: 50%;
117transform: translate(-50%, -50%);
118}
119
120/* Загрузочный прогресс-бар */
121.loader {
122border: 4px solid #f3f3f3;
123border-top: 4px solid #6200ea;
124border-radius: 50%;
125width: 40px;
126height: 40px;
127animation: spin 2s linear infinite;
128}
129
130@keyframes spin {
1310% {
132transform: rotate(0deg);
133}
134100% {
135transform: rotate(360deg);
136}
137}
138</style>
139