html - 带有两个动画的单个 SVG,一个仅通过 CSS 在另一个之后延迟播放?

标签 html css svg

我正在尝试将两个动画应用到一个 SVG,我已经能够实现这一点,但是我不知道如何延迟一个而不是另一个,因为我希望它们先播放一个,然后播放另一个。

我希望第一个动画(SVG 的路径“绘制”自身)自行播放并完成,然后再播放第二个动画(SVG 的“填充”淡入)。

我见过人们在 CSS 中使用动画延迟,但这适用于两个动画而不是单个动画,因为它是单个 SVG 目标。

这是CodePen .

以及相关的CSS:

.preload-container__svg-wrap svg{
  stroke: #EE2D24;
  fill: #EE2D24;
  fill-opacity: 0;
  width: 100%;
  height: auto;
  stroke-dasharray: 1300;
  stroke-dashoffset: 1300;
  animation: draw/*,fill*/ 5s ease forwards;
}

@keyframes draw {
  to {stroke-dashoffset: 0}
}

@keyframes fill {
  to {fill-opacity: 1}
}

笔中的JQ不相关,我在这里关注CSS问题。

最佳答案

您可以将多个关键帧选择器添加到单个动画中。有关此内容的更多详细信息,请参阅答案末尾(以及链接页面末尾)的链接。

有了这个,你可以很容易地实现我相信你正在寻找的东西,通过用它替换你的动画(我还在下面包含了一个修改后的 Codepen 与此更改):

@keyframes drawAndFill {
  0% {
    stroke-dashoffset: auto;
    fill-opacity: 0;
  }
  20% {
    fill-opacity: 0;
  }
  100% {
    stroke-dashoffset: 0;
    fill-opacity: 1;
  }
}

Assuming you would like to have your fill animation start later, just increase the percentage in the second block, equally if you would like to start it earlier, decrease the percentage.

https://codepen.io/anon/pen/GEEOdv

更新:

为了回应对该问题的评论,并无缝地对动画的两个阶段进行排队,可以按如下方式更改上述内容以实现所需的行为:

@keyframes drawAndFill {
  0% {
    stroke-dashoffset: auto; 
  }
  50% {
    fill-opacity: 0;
  }
  80% {
    stroke-dashoffset: 0;
  }
  100% {
    stroke-dashoffset: 0;
    fill-opacity: 1;
  }
}

关于html - 带有两个动画的单个 SVG,一个仅通过 CSS 在另一个之后延迟播放?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44693831/

相关文章:

html - 如何根据 Bootstrap 3 中的屏幕大小以不同的顺序显示 div?

html - 每个设备上的 Bootstrap 轮播全屏

javascript - 获取一个按钮触发两个事件

php - 如何通过单击单选按钮更改值

html - Bootstrap : Responsive row of equal-height images, 基于图像纵横比的宽度

Javascript 生成具有等效突出显示的随机颜色

html - 没有显示 SVG

php - 如何序列化 svg 以便它可以放入 cookie

javascript - 如何获取表中当前元素之前出现的具有特定类的元素数?

javascript - Safari 浏览器上的属性下载