2016-06-28 15 views
1

私はthis animationを作成しようとしています。このアニメーションはかなり複雑ですが、私がしたいのは、折りたたみアニメーションを示す半分の四角形を折り畳むことだけです。単純な四角形の折りたたみアニメーションを作成する

私はthis websiteにアクセスしました。私は、アニメーションを作成するためにスキュー機能を使用しようとしました。

これは私がこれまで使用しているコードです:

.elementLeft { 
 
    display: inline-block; 
 
    background-color: #aaaaaa; 
 
    height: 100px; 
 
    width: 100px; 
 
    font-size: 1px; 
 
    animation: shakeback 2s infinite; 
 
    animation-direction: alternate; 
 
    color: white; 
 
} 
 
.elementRight { 
 
    display: inline-block; 
 
    background-color: #aaaaaa; 
 
    height: 100px; 
 
    width: 100px; 
 
    /* transform: skew(20deg); */ 
 
    font-size: 1px; 
 
    color: white; 
 
    animation: shake 2s infinite; 
 
    animation-direction: alternate; 
 
} 
 
@keyframes shake { 
 
    0% { 
 
    transform: skewY(0deg); 
 
    } 
 
    100% { 
 
    transform: skewY(45deg); 
 
    } 
 
} 
 
@keyframes shakeback { 
 
    0% { 
 
    transform: skewY(0deg); 
 
    } 
 
    100% { 
 
    transform: skewY(-45deg); 
 
    } 
 
} 
 
body, 
 
html { 
 
    height: 100%; 
 
} 
 
body { 
 
    display: flex; 
 
    align-items: center; 
 
    justify-content: center; 
 
}
<div class="elementLeft"></div> 
 
<div class="elementRight"> 
 
</div>

Iが増加するにつれてスキュー機能はまた、正方形が長すぎるなりますので、これは私がしたい正確に何ではありません度。私はこのアニメーションを作成する別の方法を考えていましたが、私は何をすべきかわかりません。私はまた、折り畳むのではなく片側だけを折りたたむことを好みます。これは上に掲示されているGoogleカレンダーアイコンアニメーションのようなもので、アイコンの上半分は静止し、下半分は上に折り畳まれます。

編集:私はまた、この効果を形成するために正方形を上向きに回転させることができることに気付きました。しかし、アニメーションが滑らかに見えないので、私はまだ問題があります。

助けをもう一度いただきますようお願い申し上げます。

.element { 
 
    display: inline-block; 
 
    background-color: #000000; 
 
    height: 100px; 
 
    width: 100px; 
 
} 
 
.elementfold { 
 
    /* transform: rotateX(0deg); */ 
 
    animation: foldup 5s; 
 
    display: inline-block; 
 
    background-color: #aaaaaa; 
 
    height: 100px; 
 
    width: 100px; 
 
} 
 
@keyframes foldup { 
 
    0% { 
 
    transform: rotateX(0); 
 
    } 
 
    100% { 
 
    transform: rotateX(180deg) translate(0px, 100px); 
 
    } 
 
}
<li> 
 
    <div class="element"></div> 
 
</li> 
 
<li> 
 
    <div class="elementfold"></div> 
 
</li>

+1

私が試したさまざまなことの詳細について、さらに多くの詳細を追加しました。あなたが何らかの方法で助けることができるなら私に知らせてください! –

答えて

1

クレジットカードはBálintです。

上記の方法では、オブジェクトを丸めてわずかに微調整する必要があります。折りたたみアニメーションを円や楕円に適用する必要がある場合は、形状を2つの形状に分割することで行うことができます。具体的には、円は2つの半円に分割されます。

@size: 200px; 
 
.origin (@x; 
 

 
@y) { 
 
    -webkit-transform-origin: @x @y; 
 

 
-moz-transform-origin: @x @y; 
 

 
-o-transform-origin: @x @y; 
 

 
transform-origin: @x @y; 
 

 
} 
 
.red { 
 
    background-color: #f24235; 
 
} 
 
.green { 
 
    background-color: lightgreen; 
 
} 
 
.top-half { 
 
    width: @size; 
 

 
height: (@size/2); 
 
    border-radius: (@size/2) (@size/2) 0 0; 
 
} 
 
.bottom-half { 
 
    width: @size; 
 

 
height: (@size/2); 
 
    border-radius: 0 0 (@size/2) (@size/2); 
 
    .origin(0, 0); 
 
} 
 
#animation { 
 
    animation: anim 2s linear 0s infinite alternate; 
 
    // transform-origin: 50% 100%; 
 

 
} 
 
#container { 
 
    width: 100px; 
 
    height: 100px; 
 
    perspective: 300px; 
 
} 
 
@keyframes anim { 
 
    from { 
 
    transform: rotateX(0deg); 
 
    } 
 
    to { 
 
    transform: rotateX(180deg); 
 
    } 
 
}
<div class "container"> 
 
    <div class="top-half red"></div> 
 
    <div class="bottom-half green" id="animation"></div> 
 
</div>

アニメーションを見ることがthis linkに従ってください:

次のコードは、この使用してHTMLとLESS(この理由のために、それはstackoverflowの上でロードされない)のための1つの解決策を示しています。可変サイズでこれを行う他の効率的な方法がある場合は、通常のCSSまたはjsを介して私に教えてください!

1

これは有用であり得ます。私は自分でそれを試していないが、私はそれを調べるだろう。 http://anime-js.com/

1

コード:CSS3のrotateXプロパティやアニメーションを使用して

#container { 
 
    width: 100px; 
 
    height: 100px; 
 
    perspective: 300px; 
 
} 
 

 
.square { 
 
    width: 100px; 
 
    height: 100px; 
 
    background-color: grey; 
 
} 
 

 
#animation { 
 
    animation: anim 2s linear 0s infinite alternate; 
 
    transform-origin: 50% 100%; 
 
} 
 

 
@keyframes anim { 
 
    from {transform: rotateX(0deg);} 
 
    to {transform: rotateX(-180deg);} 
 
}
<div id="container"> 
 
    <div class="square" id="animation"></div> 
 
    <div class="square"></div> 
 
</div>

、それは折りたたみ正方形を作成するために非常に簡単です。

+1

これはとてもうまく動作します、ありがとう!私は1つの質問を持っています。このアニメーションを一時停止し、ボタンをクリックするか、jsの関数を使用して開始する場合は、どうすればこのようにするのですか?私は試しました: -webkit-animation-play-state:paused; これは機能していないようです。 –

+1

@KevinRajan Webkitのものではなく、通常の 'animation-play-state:paused'を使う必要があります。このアニメーションをプロダクションサイトに適用する場合は、互換性を維持するためにプロパティのWebkitバージョンと通常バージョンの両方を含める必要があります –

関連する問題