关键帧动画 - 即时更改

时间:2013-01-26 12:48:24

标签: html html5 css3 css-transitions

我已经开始学习CSS3中的关键帧动画了。有人认为我注意到的是,无论我如何使用关键帧动画“”时间“,过渡总是很平滑。

例如;背景颜色从50%变为100%,是动画从50%到100%的平滑过渡。

我想要达到的目的是通过“即时”类型的价值变化来制作动画。

再一次,一个例子是: 如果BG的50%值为红色且BG的100%值为蓝色;动画应保持红色直至达到100%,并在100%完成时立即变为蓝色。

我不确定我的术语是对还是错,但无论如何,某些方向都是完美的。

3 个答案:

答案 0 :(得分:12)

您可以使用steps作为计时功能暂停动画直到下一个关键帧

CSS:

    -webkit-animation-timing-function: steps(1, end);
    -moz-animation-timing-function: steps(1, end);
    -ms-animation-timing-function: steps(1, end);
    -o-animation-timing-function: steps(1, end);
    animation-timing-function: steps(1, end);

示例代码:

@keyframes quick {
    0% {
        background-color:green;
    }
    50% {
        -webkit-animation-timing-function: steps(1, end);
        -moz-animation-timing-function: steps(1, end);
        -ms-animation-timing-function: steps(1, end);
        -o-animation-timing-function: steps(1, end);
        animation-timing-function: steps(1, end);
        background-color:blue;
    }
    100% {
        background-color:red;
    }
}
@-o-keyframes quick {
    0% {
        background-color:green;
    }
    50% {
        -o-animation-timing-function: steps(1, end);
        background-color:blue;
    }
    100% {
        background-color:red;
    }
}
@-moz-keyframes quick {
    0% {
        background-color:green;
    }
    50% {
        -moz-animation-timing-function: steps(1, end);
        background-color:blue;
    }
    100% {
        background-color:red;
    }
}
@-webkit-keyframes quick {
    0% {
        background-color:green;
    }
    50% {
        -webkit-animation-timing-function: steps(1, end);
        background-color:red;
    }
    100% {
        background-color:blue;
    }
}
body {
    height:100%;
    width:100%;
    animation:quick 3s;
    -moz-animation:quick 3s;
    -webkit-animation:quick 3s;
    -o-animation:quick 3s;

    -webkit-animation-fill-mode: forwards;
    -moz-animation-fill-mode: forwards;
    -o-animation-fill-mode: forwards;
    animation-fill-mode: forwards;
}

http://jsfiddle.net/sC5fy/1/

答案 1 :(得分:2)

我刚刚遇到了这个问题并通过在开始时标记初始值然后在我希望立即发生更改之前再次将其绕过 - 见下文

@-webkit-keyframes image2 {
  0%   {opacity: 1;}
  24.99%   {opacity: 1;}
  25%  {opacity: 0;}
  100% {opacity: 0;}
}

答案 2 :(得分:-1)

一个非常简单的解决方案可能是在您的元素中添加background-color: red,然后在@keyframes部分中添加:

%0 {
  background-color: blue;
}

试一试:jsFiddle