【发布时间】:2014-12-23 03:21:40
【问题描述】:
我有一个框,它会变成蓝色,然后在单击时变为绿色。 如果在完成第一个动画之前再次单击该框,我希望该框反转其淡入淡出方向并从蓝绿色变回蓝色。
我想避免使用转场*,因为当用多个转场*替换关键帧时,每个转场之间会有延迟,因为浏览器需要一秒钟来确认新的 CSS 类。
您可以在这个更复杂的示例中看到我所说的延迟是什么意思:
- 由于附加类而延迟:http://codepen.io/Meo/pen/QwERrR
- 因为动画没有延迟:http://codepen.io/Meo/pen/RNGwPe
这可能吗?我的尝试如下,但它没有按预期工作。
另外,我有 looked into using the Web Animations API,但它很新,似乎有自己的一系列限制,尽管它可以反转动画。
$('.box').click(function() {
if ($(this).hasClass('colored')) {
if ($(this).hasClass('reverse')) {
$(this).removeClass('reverse');
} else {
$(this).addClass('reverse').removeClass('colored');
}
} else {
$(this).addClass('colored');
}
});
.box {
background-color: red;
width: 200px;
height: 200px;
}
.colored {
-webkit-animation: color 4s linear forwards;
}
.reverse {
-webkit-animation: color 4s linear backwards;
}
@-webkit-keyframes color {
0% {
background-color: blue;
}
100% {
background-color: green;
}
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class='box'></div>
【问题讨论】:
-
CSS 过渡可能是一种更简单的方法。
-
如问题描述中所述 - 我想避免使用转换(哦,我在描述中说转换,我的意思是转换。抱歉,现在还早)而不是动画。当收听“webkitTransitionEnd”然后应用一个新的 CSS 类来模拟关键帧中的步骤时,每个步骤之间会有一个延迟,因为浏览器需要一点时间来确认元素上的新 CSS 类。这使得整体效果感觉笨重而不是平滑。
-
我知道 Greensock 库可以使用 JS 反转动画 - 我不确定它是否对你想要做的事情有点过分!也许会有所帮助:codepen.io/GreenSock/pen/AwCKp
-
我忘记了 Greensock!这可能有点矫枉过正,但绝对值得考虑。
标签: css css-animations