同时播放多个CSS动画

Don*_*n P 87 css css3 css-animations

如何以不同的速度播放两个CSS动画?

  • 图像应该同时旋转和增长.
  • 旋转将每2秒循环一次.
  • 增长将每4秒循环一次.

示例代码:

.image {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 120px;
    height: 120px;
    margin:-60px 0 0 -60px;
    -webkit-animation:spin 2s linear infinite;
    -webkit-animation:scale 4s linear infinite;
}

@-webkit-keyframes spin { 
    100% { 
        transform: rotate(180deg);
    } 
}

@-webkit-keyframes scale {
    100% {
         transform: scaleX(2) scaleY(2);
    }
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/Ugc5g/3388/ - 只播放一个动画(最后一个动画).

cri*_*ror 198

如果有新的人出现并捕获此线程,您可以使用逗号指定多个动画 - 每个动画都有自己的属性.

例:

animation: rotate 1s, spin 3s;
Run Code Online (Sandbox Code Playgroud)

  • 地狱是的逗号! (10认同)
  • 是.这应该是公认的答案. (3认同)
  • @little-tiny-man你也可以通过coma指定多个`animation-delay`,请参阅[这个答案](/sf/answers/3468285621/) (3认同)
  • 谢谢,这是一个更简单的解决方案 (2认同)
  • 那不同的动画延迟呢? (2认同)

rnr*_*ies 117

TL; DR

使用逗号,您可以指定多个动画,每个动画都有自己的属性.

例:

animation: rotate 1s, spin 3s;
Run Code Online (Sandbox Code Playgroud)

原始答案

这里有两个问题:

#1

-webkit-animation:spin 2s linear infinite;
-webkit-animation:scale 4s linear infinite;
Run Code Online (Sandbox Code Playgroud)

第二行替换第一行.所以,没有效果.

#2

两个关键帧都适用于同一属性 transform

作为替代方案,您可以将图像分别包装<div>以不同的速度分别每个图像设置动画.

http://jsfiddle.net/rnrlabs/x9cu53hp/

.scaler {
    position: absolute;
    top: 100%;
    left: 50%;
    width: 120px;
    height: 120px;
    margin:-60px 0 0 -60px;
    animation: scale 4s infinite linear;    
}

.spinner {
    position: relative;
    top: 150px;
    animation: spin 2s infinite linear;
}


@keyframes spin { 
    100% { 
        transform: rotate(180deg);
    } 
}

@keyframes scale {
    100% {
         transform: scaleX(2) scaleY(2);
    }
}
Run Code Online (Sandbox Code Playgroud)
<div class="spinner">
<img class="scaler" src="http://makeameme.org/media/templates/120/grumpy_cat.jpg" alt="" width="120" height="120">
<div>
Run Code Online (Sandbox Code Playgroud)

  • 您是否编辑了答案以在下面包含@CriticalError的答案?问一个朋友。 (7认同)

Ray*_*din 34

您确实可以同时运行多个动画,但您的示例有两个问题.首先,您使用的语法仅指定一个动画.第二种风格规则隐藏了第一种风格规则.您可以使用以下语法指定两个动画:

-webkit-animation-name: spin, scale
-webkit-animation-duration: 2s, 4s
Run Code Online (Sandbox Code Playgroud)

就像在这个小提琴里(由于下面解释的另一个问题,我用"淡入淡出"取代了"缩放"......跟我一起.):http://jsfiddle.net/rwaldin/fwk5bqt6/

其次,两个动画都会改变同一DOM元素的相同CSS属性(变换).我不相信你能做到这一点.您可以在不同的元素上指定两个动画,可能是图像和容器元素.只需将其中一个动画应用到容器中,就像在这个小提琴中一样:http://jsfiddle.net/rwaldin/fwk5bqt6/2/


Ram*_*eya 5

您不能播放两个动画,因为该属性只能定义一次。相反,为什么不在第一个动画中包含第二个动画并调整关键帧以获得正确的时间呢?

.image {
    position: absolute;
    top: 50%;
    left: 50%;
    width: 120px;
    height: 120px;
    margin:-60px 0 0 -60px;
    -webkit-animation:spin-scale 4s linear infinite;
}

@-webkit-keyframes spin-scale { 
    50%{
        transform: rotate(360deg) scale(2);
    }
    100% { 
        transform: rotate(720deg) scale(1);
    } 
}
Run Code Online (Sandbox Code Playgroud)
<img class="image" src="http://makeameme.org/media/templates/120/grumpy_cat.jpg" alt="" width="120" height="120">
Run Code Online (Sandbox Code Playgroud)

  • 用户要求“以不同的速度” (2认同)