直接上代码吧
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>进度条</title>
</head>
<style>
#app {
display: flex;
justify-content: center;
align-items: center;
height: 100%;
}
.progress {
width: 400px;
height: 80px;
background-image: linear-gradient(to right, #c424c5 calc(var(--percent) * 1%), #fed245 calc(var(--percent) * 1%));
animation: all 2000ms;
border-radius: 10px;
}
.progress p {
height: 80px;
width: 100%;
line-height: 80px;
background-image: linear-gradient(to right, #fff calc(var(--percent) * 1%), #c424c5 calc(var(--percent) * 1%));
border-radius: 10px;
text-align: center;
margin: 0;
color: transparent;
-webkit-background-clip: text;
}
.progress p span::after {
content: attr(data-progress);
}
</style>
<body>
<div id="app">
<div class="progress" style="--percent: 0">
<p>正在安装<span data-progress="0"></span>%</p>
</div>
</div>
<script>
const progress = document.querySelector(".progress");
const spanStr = document.querySelector(".progress p span")
const setProgress = (val) => {
progress.style.setProperty("--percent", val);
spanStr.setAttribute("data-progress", val);
};
let val = 0;
let timer = setInterval(() => {
if (val < 100) {
val += Math.floor(Math.random() * 5);
setProgress(val);
// $(".progress span").text(val);
} else {
clearInterval(timer);
}
}, 200);
</script>
</body>
<html>
css中的content属性,只能在伪元素中使用的,可以在标签后面,为标签添加上内容值
-webkit-background-clip: 设置文字的渐变效果
外层一个渐变, 文字层也弄一个渐变,文字直接设置成透明的就行了。