基本的に私がやろうとしていることは、クラスを取得したときに要素にCSSアニメーションを与え、クラスを削除するときにそのアニメーションを逆にすることですDOMがレンダリングするときにアニメーションを再生せずに 。
ここでフィドル: http://jsfiddle.net/bmh5g/
フィドルでわかるように、「Hover Me」ボタンをホバーすると、#item
はめくります。ホバーボタンをマウスオフすると、#item
が消えます。が欲しいです #item
元に戻す(理想的には同じアニメーションを逆に使用する)。これは可能ですか?
HTML:
<div id='trigger'>Hover Me</div>
<div id='item'></div>
CSS:
#item
{
position: relative;
height: 100px;
width: 100px;
background: red;
-webkit-transform: perspective(350px) rotateX(-90deg);
transform: perspective(350px) rotateX(-90deg);
-webkit-transform-Origin: 50% 0%;
transform-Origin: 50% 0%;
}
#item.flipped
{
animation: flipper 0.7s;
animation-fill-mode: forwards;
-webkit-animation: flipper 0.7s;
-webkit-animation-fill-mode: forwards;
}
@keyframes flipper
{
0% { transform: perspective(350px) rotateX(-90deg); }
33% { transform: perspective(350px) rotateX(0deg); }
66% { transform: perspective(350px) rotateX(10deg); }
100% { transform: perspective(350px) rotateX(0deg); }
}
@-webkit-keyframes flipper
{
0% { -webkit-transform: perspective(350px) rotateX(-90deg); }
33% { -webkit-transform: perspective(350px) rotateX(0deg); }
66% { -webkit-transform: perspective(350px) rotateX(10deg); }
100% { -webkit-transform: perspective(350px) rotateX(0deg); }
}
Javascript:
$('#trigger').on({
mouseenter: function(){
$('#item').addClass('flipped');
},
mouseleave: function(){
$('#item').removeClass('flipped');
}
})
私は#item
デフォルトでは、リバースアニメーションで非表示になります。次に、クラスを追加してアニメーションを与え、#item
。 http://jsfiddle.net/bmh5g/12/
jQuery
$('#trigger').on({
mouseenter: function(){
$('#item').show();
$('#item').addClass('flipped');
},
mouseleave: function(){
$('#item').removeClass('flipped');
}
});
[〜#〜] css [〜#〜]
#item
{
position: relative;
height: 100px;
width: 100px;
background: red;
display: none;
-webkit-transform: perspective(350px) rotateX(-90deg);
transform: perspective(350px) rotateX(-90deg);
-webkit-transform-Origin: 50% 0%;
transform-Origin: 50% 0%;
animation: flipperUp 0.7s;
animation-fill-mode: forwards;
-webkit-animation: flipperUp 0.7s;
-webkit-animation-fill-mode: forwards;
}
display: none
を使用するのではなく、ページの読み込み時にクラスで逆アニメーションを抑制し、通常のアニメーションを適用する同じイベント(たとえば、フリッパー)でそのクラスを削除する方法もあります。そのように( http://jsfiddle.net/astrotim/d7omcbrz/1/ ):
CSS-上記のBlakeが投稿したflipperUpキーフレームに加えて
#item.no-animation
{
animation: none;
}
jQuery
$('#trigger').on({
mouseenter: function(){
$('#item').removeClass('no-animation');
$('#item').addClass('flipped');
},
mouseleave: function(){
$('#item').removeClass('flipped');
}
})
$(selector)
をキャッシュしてくださいしたがって、キャッシュするために、_var elements = $(selector);
を実行します。
なぜ?!このページの回答にあるコードをそのまま使用すると、DOMに毎回同じ要素コレクション($('#item')
)を要求するためです。 DOM読み取りは高価な操作です。
たとえば、受け入れられた答えは次のようになります。
var item = $('#item');
$('#trigger').on({
mouseenter: function(){
item.show();
item.addClass('flipped');
},
mouseleave: function(){
item.removeClass('flipped');
}
});
CSSアニメーションの例を求めたのは知っていますが、やりたいアニメーション(カードが開く)では、CSSトランジションを使用して簡単に実現できます。
#item {
width: 70px;
height: 70px;
background-color: black;
line-height: 1;
color: white;
}
#item+div {
width: 70px;
height: 100px;
background-color: blue;
transform: perspective(250px) rotateX(-90deg);
transform-Origin: 50% 0%;
transition: transform .25s ease-in-out
}
#item:hover+div {
transform: perspective(250px) rotateX(0);
}
<div id="item"></div>
<div></div>
Cssを使用してアニメーション化するため、アニメーション化するには、クラスを作成する必要があります。逆に変換を行う.item-upの場合、前のクラスを削除してアイテムアップクラスを追加し、アニメーション化する必要がありますそれを。
私はあなたのためにjsフィドルを書くでしょうが、構文を十分によく知りません。
基本的に必要な場合:
@keyframes flipper
@keyframes flipper-up //This does the opposite of flipper
そして
$('#trigger').on({
mouseenter: function(){
$('#item').removeClass('flipped-up');
$('#item').addClass('flipped');
},
mouseleave: function(){
$('#item').removeClass('flipped');
$('#item').addClass('flipped-up');
}
})
jsfiddle.net/bmh5g/ Jakeの厚意により
[〜#〜] mdn [〜#〜] からのCSSソリューションで、すべてのブラウザーでほぼサポートされています
.animation(animationName 10s ease-in-out無限の代替の両方が実行中;)