Подход 1 (анимация CSS):
Вы можете добиться этого эффекта, используя только анимацию CSS.
Эта анимация анимирует ширину #ProgressBarPercentage
от 0
до 100%
.
Рабочий пример:
#ProgressBar {
margin-top: 30px;
height: 30px;
padding: 15px;
background-color: rgb(0, 0, 0);
}
#ProgressBarPercentage {
height: 30px;
background-color: rgb(255, 0, 0);
animation: loadProgressBar 4s linear;
}
@keyframes loadProgressBar {
0% {width: 0;}
100% {width: 100%;}
}
<div id="ProgressBar">
<div id="ProgressBarPercentage"></div>
</div>
Подход 2 (переход CSS):
Немного сложнее обновить значения CSS @keyframes
через javascript, поэтому здесьявляется альтернативой вышеприведенной версии, на этот раз с использованием CSS transition
вместо CSS animation
.
Функция будет принимать параметр в диапазоне от 0 до 100. Когда функция запускается, #ProgressBarPercentage
будет переходитьот текущего значения к новому значению.
Рабочий пример:
const progressBarPercentage = document.getElementById('ProgressBarPercentage');
const transitionProgressBar = (progress) => {
setTimeout(() => {
progressBarPercentage.style.width = progress + '%';
}, 200);
}
// INITIAL TRANSITION (on PAGE LOAD)
transitionProgressBar(32);
// SUBSEQUENT TRANSITIONS
setTimeout(() => {transitionProgressBar(59)}, 4000);
setTimeout(() => {transitionProgressBar(78)}, 8000);
setTimeout(() => {transitionProgressBar(96)}, 12000);
#ProgressBar {
margin-top: 30px;
height: 30px;
padding: 15px;
background-color: rgb(0, 0, 0);
}
#ProgressBarPercentage {
width: 0;
height: 30px;
background-color: rgb(255, 0, 0);
transition: width 2s linear;
}
<div id="ProgressBar">
<div id="ProgressBarPercentage"></div>
</div>