倒计时进度条是一种常见的用户界面元素,用于显示剩余时间或任务的完成进度。它通常通过动态更新进度条的长度或颜色来反映时间的流逝或任务的进展。
以下是一个简单的JavaScript实现倒计时进度条的示例代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>倒计时进度条</title>
<style>
#progressBar {
width: 100%;
background-color: #ddd;
}
#progress {
width: 0%;
height: 30px;
background-color: #4CAF50;
text-align: center;
line-height: 30px;
color: white;
}
</style>
</head>
<body>
<div id="progressBar">
<div id="progress">100%</div>
</div>
<script>
// 设置倒计时总秒数
const totalTime = 60; // 例如60秒
let timeLeft = totalTime;
const progressBar = document.getElementById('progress');
const progressText = progressBar.querySelector('span');
function updateProgressBar() {
const percentage = (timeLeft / totalTime) * 100;
progressBar.style.width = percentage + '%';
progressText.textContent = Math.round(percentage) + '%';
if (timeLeft > 0) {
timeLeft--;
setTimeout(updateProgressBar, 1000);
} else {
progressText.textContent = '完成!';
}
}
updateProgressBar();
</script>
</body>
</html>
问题1:进度条更新不流畅
requestAnimationFrame
代替setTimeout
来优化动画效果。function updateProgressBar() {
const percentage = (timeLeft / totalTime) * 100;
progressBar.style.width = percentage + '%';
progressText.textContent = Math.round(percentage) + '%';
if (timeLeft > 0) {
timeLeft--;
requestAnimationFrame(updateProgressBar);
} else {
progressText.textContent = '完成!';
}
}
问题2:页面刷新后倒计时重置
localStorage
)来保存倒计时的状态。const storedTimeLeft = localStorage.getItem('timeLeft');
if (storedTimeLeft) {
timeLeft = parseInt(storedTimeLeft, 10);
}
function updateProgressBar() {
const percentage = (timeLeft / totalTime) * 100;
progressBar.style.width = percentage + '%';
progressText.textContent = Math.round(percentage) + '%';
if (timeLeft > 0) {
timeLeft--;
localStorage.setItem('timeLeft', timeLeft);
setTimeout(updateProgressBar, 1000);
} else {
localStorage.removeItem('timeLeft');
progressText.textContent = '完成!';
}
}
通过以上方法,可以有效实现并优化倒计时进度条的功能。
领取专属 10元无门槛券
手把手带您无忧上云