我有一组动画,我一个接一个地排队以创建更大的整体动画。为了简单起见,我创建了一个简单的小提琴来演示我的意思,但它是我想要实现的简化版本(底部的代码)......
http://jsfiddle.net/UnsungHero97/qgvrs/5/
我想要做的是将所有这些组合成一个动画而不是几个。目前,我添加了一个类来触发动画的不同阶段,但我想做的是只添加一个类来启动动画,然后它就走了。
我不知道如何将动画组合成一个,因为它们适用于不同的元素。我对 CSS3 动画还很陌生,所以可以这样做吗?
有什么想法吗?
编码
HTML
<div class="outside">
<div class="inside"></div>
</div>
CSS
.outside {
border: 1px solid magenta;
height: 100px;
width: 100px;
position: relative;
}
.inside {
border: 1px solid skyblue;
height: 60px;
width: 60px;
margin-top: -31px;
margin-left: -31px;
position: absolute;
top: 50%;
left: 50%;
}
@-webkit-keyframes scale-in {
0% {
-webkit-transform: scale(0);
}
100% {
-webkit-transform: scale(1);
}
}
@-webkit-keyframes bounce {
0% {
-webkit-transform: scale(1);
}
25% {
-webkit-transform: scale(.8);
}
50% {
-webkit-transform: scale(1);
}
75% {
-webkit-transform: scale(.9);
}
100% {
-webkit-transform: scale(1);
}
}
@-webkit-keyframes rotate {
0% {
-webkit-transform: rotate(0deg);
}
100% {
-webkit-transform: rotate(360deg);
}
}
.bounce {
-webkit-animation-duration: 500ms;
-webkit-animation-name: bounce;
}
.animate {
-webkit-animation-delay: 0s;
-webkit-animation-fill-mode: forwards;
-webkit-animation-timing-function: ease;
-webkit-transform: translateZ(0);
}
.click {
border: 1px solid skyblue;
-webkit-animation-duration: 1000ms;
-webkit-animation-name: rotate;
}
.click .inside {
border: 1px solid magenta;
-webkit-animation-duration: 1000ms;
-webkit-animation-name: rotate;
}
.clicked {
border: 1px solid magenta;
}
.clicked .inside {
border: 1px solid skyblue;
-webkit-animation-duration: 750ms;
-webkit-animation-name: scale-in;
}
JS
$(document).ready(function() {
$(document).click(function() {
var jqElement = $('.outside');
jqElement
.off()
.addClass('animate')
.addClass('bounce');
jqElement.on('animationend webkitAnimationEnd oAnimationEnd MSAnimationEnd', function(event) {
event.stopPropagation();
jqElement
.removeClass('bounce')
.removeClass('animate')
.off()
.addClass('animate')
.addClass('click');
jqElement.on('animationend webkitAnimationEnd oAnimationEnd MSAnimationEnd', function(event) {
event.stopPropagation();
jqElement
.removeClass('click')
.removeClass('animate')
.off()
.addClass('clicked');
setTimeout(function() {
jqElement.removeClass('clicked');
}, 500);
});
});
});
});