📅  最后修改于: 2023-12-03 15:36:28.343000             🧑  作者: Mango
在本文中,我们将学习如何使用 HTML 和 CSS 创建一个圆形进度条。这是一个简单的项目,但可以帮助你学习 CSS 过渡和动画的基础知识。
在开始本教程之前,你需要了解以下内容:
我们将从创建一个 HTML 文件开始。这个文件里应该包含项目使用到的所有 HTML 元素。在这个教程里,我们将创建四个元素:
在 HTML 文件中,我们的代码将如下所示:
<div class="progress">
<div class="progress-circle"></div>
<div class="progress-label">0%</div>
<input type="range" class="progress-input" min="0" max="100" />
</div>
接下来,我们需要添加一些样式来展示进度条。
我们将使用 CSS3 的开关属性 transform
来实现进度(圆形)元素的旋转,并使用 transition
属性来定义该属性的过渡效果。
我们还将使用 border-radius
属性来定义圆形元素,box-shadow
属性来实现描边效果,以及 font-family
和 text-shadow
属性来定义标签元素的字体和字体阴影。
在我们的 CSS 文件中,代码如下所示:
.progress {
width: 200px;
height: 200px;
position: relative;
}
.progress-circle {
width: 100%;
height: 100%;
border-radius: 50%;
background-color: #eee;
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.3);
transform: rotate(-90deg);
transition: transform 0.3s ease;
}
.progress-label {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-family: Arial, sans-serif;
font-size: 32px;
font-weight: bold;
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
color: #333;
}
.progress-input {
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 80%;
}
最后,我们需要添加一些 JavaScript 代码,使输入元素的值可以映射到进度(圆形)元素上。
我们将监听输入元素的 “input” 事件,并将其值映射到旋转角度上。这是通过将旋转角度设置为输入元素值的百分比来实现的。我们还将更新标签元素的文本内容,以显示当前进度的百分比。
在我们的 JavaScript 文件中,代码如下所示:
const progressCircle = document.querySelector(".progress-circle");
const progressLabel = document.querySelector(".progress-label");
const progressInput = document.querySelector(".progress-input");
progressInput.addEventListener("input", () => {
const percent = progressInput.value;
const degrees = -90 + percent / 100 * 360;
progressCircle.style.transform = `rotate(${degrees}deg)`;
progressLabel.textContent = `${percent}%`;
});
HTML 代码片段:
<div class="progress">
<div class="progress-circle"></div>
<div class="progress-label">0%</div>
<input type="range" class="progress-input" min="0" max="100" />
</div>
CSS 代码片段:
.progress {
width: 200px;
height: 200px;
position: relative;
}
.progress-circle {
width: 100%;
height: 100%;
border-radius: 50%;
background-color: #eee;
box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.3);
transform: rotate(-90deg);
transition: transform 0.3s ease;
}
.progress-label {
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
font-family: Arial, sans-serif;
font-size: 32px;
font-weight: bold;
text-shadow: 1px 1px 1px rgba(0, 0, 0, 0.5);
color: #333;
}
.progress-input {
position: absolute;
bottom: 0;
left: 50%;
transform: translateX(-50%);
width: 80%;
}
JavaScript 代码片段:
const progressCircle = document.querySelector(".progress-circle");
const progressLabel = document.querySelector(".progress-label");
const progressInput = document.querySelector(".progress-input");
progressInput.addEventListener("input", () => {
const percent = progressInput.value;
const degrees = -90 + percent / 100 * 360;
progressCircle.style.transform = `rotate(${degrees}deg)`;
progressLabel.textContent = `${percent}%`;
});