继续 CSS 动画循环

问题描述 投票:0回答:1

我有一个动画进度条,我使用

animation-iteration-count
CSS 属性来指定百分比进度。因此,如果进度应该是 50%,我设置
animation-iteration-count: 0.5
。在页面加载时,效果很好,进度条从 0% 动画到 50%。

但是如何更改进度条值并继续 CSS 动画循环到新值?更大或更小的值。当我使用 JavaScript 动态更改

animation-iteration-count
值时,动画会跳转到该新值。我希望从一个值平滑过渡到下一个值。

如果我只想对宽度进行动画处理,我可以使用 CSS 过渡并且没有任何问题。但因为我也想改变进度条相对于 CSS 动画进度的颜色,所以要容易得多。

我尝试过尝试

animation-play-state
,但没有运气,但也许我只是做得不对。我还尝试过使用
@container
查询来更改进度的背景颜色,然后使用 CSS 过渡来调整宽度,但这也不可行。

在下面的代码片段中你可以看到我的进度条,点击按钮增加

animation-iteration-count
属性的值就可以看到它跳跃了。

const progressBar = document.querySelector(".progress-bar");
const button = document.querySelector("button");
button.addEventListener("click", (e) => {
 progressBar.style.animationIterationCount = "0.75";
})
.progress-bar-container {
    width: 500px;
    outline: 1px solid black;
}

.progress-bar {
    height: 10px;
    animation: progressBarAnimation 2s linear forwards;
}


@keyframes progressBarAnimation {
    0% {
        background-color: red;
        width: 0;
    }
    30% {
        background-color: yellow;
        width: 30%;
    }
    60% {
        background-color: green;
        width: 60%;
    }
    100% {
        background-color: blue;
        width: 100%;
    }
}
<div class="progress-bar-container">
    <div class="progress-bar" style="animation-iteration-count: 0.5">
    </div>
</div>
<button>Increase progress</button>

谢谢你帮助我!

问候, 杰普

css css-animations progress-bar
1个回答
0
投票

animation-iteration-count
不是用于停止/启动动画的属性。

通过css设置将重新启动动画。

您可能最好创建一个常规进度条,该进度条将使用

width
来动画增长。然后使用
:before
元素根据您的喜好应用
gradient

const progressBar = document.querySelector(".progress-bar");
const button = document.querySelector("button");

button.addEventListener("click", (e) => {
 progressBar.style.width = "75%";
 //progressBar.style.animation = 'progressBarAnimation 1s linear forwards';
})
.progress-bar-container {
    width: 500px;
    outline: 1px solid black;
    position: relative;
    background: white;
}

.progress-bar {
    height: 10px;
    width: 50%;
    transition: width 1s ease-in-out;
    -webkit-mask:linear-gradient(#fff 0 0);
          mask:linear-gradient(#fff 0 0);
}

.progress-bar:before {
content:"";
  position:absolute;
  top:0;
  left:0;
  right:0;
  bottom:0;
  background: linear-gradient(90deg, rgba(255,0,0,1) 25%, rgba(247,255,0,1) 50%, rgba(0,255,19,1) 80%, rgba(1,0,255,1) 99%);
}
<div class="progress-bar-container">
    <div class="progress-bar" style="animation-iteration-count: 0.5">


    </div>
</div>
<button>Increase progress</button>

© www.soinside.com 2019 - 2024. All rights reserved.