我的代码在这里显示了复选标记的动画。
它可以工作,但问题在于,它不会循环。它只动画了一次。我想要的是每2秒制作一次动画。
Codepen链接:http://codepen.io/haniotis/pen/KwvYLO
CSS看起来像这样:
<svg class="checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
<circle class="checkmark__circle" cx="26" cy="26" r="25" fill="none" />
<path class="checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8" />
</svg>
HTML看起来像这样:
CREATE UNIQUE INDEX main_category_unique ON items_categories (item_id)
WHERE main = TRUE;
答案 0 :(得分:3)
注意:虽然这个问题与我在评论中链接的问题部分类似,但由于存在需要链接在一起的多个动画,所以它有点复杂因此我正在添加一个单独的答案来解释它。
让任何CSS3动画无限次运行非常简单。只需将animation-iteration-count
设置为infinite
即可实现这一目标。但是每隔[x]秒重复一次动画要复杂得多,因为正如我的回答here中所解释的那样,animation-delay
属性仅在动画的第一次迭代之前而不是在每次迭代之前添加延迟。每一次迭代。
该答案解释了如何在每次迭代之间添加延迟,因此我不会详细介绍。但是你的情况有点复杂,因为有四个动画链接在一起产生效果,因此所有这些动画都需要修改才能使它工作。
以下是你需要做的事情,让它每2秒无限重复一次:
animation-iteration-count: infinite
添加到所有4个动画(或),只需将infinite
个关键字添加到所有animation
速记属性中。.checkmark__circle
上的动画应该为.6s
运行并且没有延迟。 .6s
约为3.2s
的18.75%,因此动画的关键帧应该更改,以便整个动画以18.75%的分数完成,并保持这种状态直到100%标记。.checkmark__check
上的动画应该延迟.8s
,这是3.2s
持续时间的25%。所以它应该从25%开始,持续时间是.3s
,大约是3.2s
的9.37%。因此,这个动画应该以25%的标记开始,并在达到34.37%标记时完成。从那里到100%标记,它必须保持该状态。由于关键帧现在与圆圈动画不同,我们需要添加两个不同的@keyframes
规则。.checkmark
上的填充动画的持续时间为.4s
且延迟相同。因此,它应该以12.5%的标记开始,以25%的分数完成并保持这种状态直到100%的标记。.checkmark
上的缩放动画的持续时间为.3s
,延迟时间为.9s
。因此,这必须从28.125%开始,并以37.5%的标记完成。这意味着中点(transform: scale3d(1.1, 1.1, 1);
应该是32.8125%。完成所有这些更改后,动画将无限运行,每次循环之间的延迟为2秒。下面是使用编译的CSS的演示。 SCSS版本可用here。
.checkmark__circle {
stroke-dasharray: 166;
stroke-dashoffset: 166;
stroke-width: 2;
stroke-miterlimit: 10;
stroke: #7ac142;
fill: none;
animation: stroke 3.2s cubic-bezier(0.65, 0, 0.45, 1) forwards infinite;
}
.checkmark {
width: 56px;
height: 56px;
border-radius: 50%;
display: block;
stroke-width: 2;
stroke: #fff;
stroke-miterlimit: 10;
margin: 10% auto;
box-shadow: inset 0px 0px 0px #7ac142;
animation: fill 3.2s ease-in-out forwards infinite, scale 3.2s ease-in-out both infinite;
}
.checkmark__check {
transform-origin: 50% 50%;
stroke-dasharray: 48;
stroke-dashoffset: 48;
animation: stroke-check 3.2s cubic-bezier(0.65, 0, 0.45, 1) forwards infinite;
}
@keyframes stroke {
18.75%, 100% {
stroke-dashoffset: 0;
}
}
@keyframes stroke-check {
25% {
stroke-dashoffset: 48;
}
34.37%,
100% {
stroke-dashoffset: 0;
}
}
@keyframes scale {
0%, 28.125%, 37.5%, 100% {
transform: none;
}
32.8125% {
transform: scale3d(1.1, 1.1, 1);
}
}
@keyframes fill {
12.5% {
box-shadow: inset 0px 0px 0px #7ac142;
}
25%,
100% {
box-shadow: inset 0px 0px 0px 30px #7ac142;
}
}
<svg class="checkmark" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 52 52">
<circle class="checkmark__circle" cx="26" cy="26" r="25" fill="none" />
<path class="checkmark__check" fill="none" d="M14.1 27.2l7.1 7.2 16.7-16.8" />
</svg>