Как создать круговой индикатор выполнения прогресса с помощью HTML CSS и JavaScript | How To Make A Circular Progress Bar using HTML CSS and JavaScript
Всем Привет. В этом видео мы создадим круговой индикатор выполнения прогресса используя HTML CSS и JavaScript. Надеюсь, это видео будет для вас полезным. Если при создании этого кода возникнут трудности, вы сможете скачать архив с готовым исходным кодом ниже по ссылке.
Кроме того, если у вас есть какие-либо вопросы, предложения или отзывы, то напишите их в комментариях ниже.
HTML КОД:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Circular Progress bar - JavaScript</title>
<!--css file-->
<link rel="stylesheet" href="styles.css" />
</head>
<body>
<div class="wrapper">
<div class="progress-bar">
<span class="value">0%</span>
</div>
<div class="text">Enter Any Number</div>
<form action="#">
<input type="number" autofocus max="100" />
<button class="btn">Enter</button>
</form>
</div>
<script src="app.js"></script>
</body>
</html>
CSS КОД:
/* Google Fonts(Poppins) */
@import url("https://fonts.googleapis.com/css2?family=Poppins:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap");
* {
font-family: "Poppins", sans-serif;
margin: 0;
padding: 0;
box-sizing: border-box;
}
body {
min-height: 100vh;
display: flex;
align-items: center;
justify-content: center;
background: #4070f4;
}
.wrapper {
position: relative;
width: 500px;
background: #fff;
padding: 50px;
display: flex;
flex-direction: column;
align-items: center;
border-radius: 20px;
}
.wrapper .progress-bar {
position: relative;
width: 250px;
height: 250px;
background: conic-gradient(#4070f4 0deg, #ededed 0deg);
border-radius: 50%;
display: flex;
align-items: center;
justify-content: center;
}
.wrapper .progress-bar::before {
position: absolute;
content: "";
inset: 10px;
background: #fff;
border-radius: 50%;
}
.wrapper .progress-bar .value {
font-size: 60px;
font-weight: 600;
color: #4070f4;
z-index: 9;
}
.wrapper .text {
font-size: 25px;
font-weight: 600;
color: #4070f4;
margin: 20px 0;
}
.wrapper form {
display: flex;
align-items: center;
justify-content: center;
width: 90%;
height: 40px;
}
.wrapper form input {
width: 70%;
height: 100%;
outline: none;
border: 2px solid #4070f4;
font-size: 18px;
text-align: center;
border-radius: 10px 0 0 10px;
}
.wrapper form input::-webkit-inner-spin-button {
display: none;
}
.wrapper form .btn {
width: 30%;
height: 100%;
background: #4070f4;
color: #fff;
border: none;
font-size: 18px;
font-weight: 500;
text-transform: uppercase;
cursor: pointer;
border-radius: 0 10px 10px 0;
}
JAVASCRIPT КОД:
let btn = document.querySelector(".btn");
let input = document.querySelector("input");
let progressBar = document.querySelector(".progress-bar");
let valueSpan = document.querySelector("span");
let value = 0;
btn.onclick = function () {
if (input.value != "" && parseInt(input.value) <= input.max) {
let progress = setInterval(() => {
if (value < input.value) {
value++;
} else {
value--;
}
valueSpan.textContent = `${value}%`;
progressBar.style.background = `conic-gradient(#4070f4 ${
value * 3.6
}deg, #ededed 0deg)`;
// 360 / 100 = 3.6
if (value == input.value) {
clearInterval(progress);
input.value = "";
input.focus();
}
}, 50);
}
};
0 Комментарии