一連のアニメーションを順番に並べて、より大きな全体的なアニメーションを作成します。簡単にするために、私が何を意味するかをデモするための簡単なフィドルを作成しましたが、それは私が達成しようとしていることの単純化されたバージョンです (下部のコード)...
http://jsfiddle.net/UnsungHero97/qgvrs/5/
私がやりたいのは、これらすべてを複数ではなく 1 つのアニメーションに結合することです。現在、アニメーションのさまざまな段階をトリガーするクラスを追加していますが、アニメーションを開始するために一度だけクラスを追加したいだけです。
アニメーションは異なる要素で動作するため、アニメーションを 1 つに結合する方法がわかりません。私はまだ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);
});
});
});
});