Little Strange Software

スマホアプリの開発を行う LittleStrangeSoftware のブログです。

【CSS】跳ねるボール【多重アニメーションの実験】

 どうも!LSSです!!

 

なんとなく「2つのkeyframesアニメーションで、2つめの動きが1つめの動きの状態に影響されて変化するようなもの」を試してみたい と思いたち、作ってみると こういうものができました。

 

 

跳ねるボール

跳ねるボール

 

 

 

コード

<style>
@keyframes dblanm1{
0%{width:135px;}
100%{width:100%;}
}
@keyframes dblanm2{
0%{background-position:0% 0%;}
100%{background-position:100% 0%;}
}
.dblanm{
height:30px;
border-radius:15px;
padding-left:15px;
animation:dblanm1 15s linear infinite alternate,dblanm2 1s ease infinite alternate;
background-color:#ddffdd;
background-image:radial-gradient(15px,#88cc88ff 80%,#88cc8800 100%);
background-size:30px 30px;
background-repeat:no-repeat;
}
</style>
<div class="dblanm">跳ねるボール</div>

 

 

2つのアニメーション

まず1つめは、

@keyframes dblanm1{
0%{width:135px;}
100%{width:100%;}
}

divタグの枠の「幅(width)」を、135pxから100%まで変化させるキーフレームを定義しています。

呼び出し時に、

animation:dblanm1 15s linear infinite alternate,dblanm2 1s ease infinite alternate;

infinite(無限繰り返し)とalternate(終了後に逆再生)を指定しているので、伸びて縮んで…を繰り返す事になります。

 

2つめは、

@keyframes dblanm2{
0%{background-position:0% 0%;}
100%{background-position:100% 0%;}
}

その枠にの背景画像の描画開始位置(background-position)の横位置を0%から100%に変化させるキーフレームを定義しています。

 

背景画像として、

background-image:radial-gradient(15px,#88cc88ff 80%,#88cc8800 100%);
background-size:30px 30px;
background-repeat:no-repeat;

「半径15pxの円をradial-gradientで描き、そのサイズは縦横30px、繰り返し描画しない」という指定にしているので、ポツンと小さい円がひとつあるだけのものを指定しています。

 

これで横位置を0%から100%に変化させているので、「枠の中で左端から右端に移動する」というアニメーション、という事になります。

 

こちらも、呼び出し時に

animation:dblanm1 15s linear infinite alternate,dblanm2 1s ease infinite alternate;

無限繰り返し、終了時に逆再生、という指定をしているため、延々と往復運動を繰り返す事になります。

 

この2つのアニメ―ションを、同時に指定している事で、

「伸び縮みする枠の中で、ボールが左右に往復運動し続ける」

というものになるんですね。

 

 

あとがき

複数の動き、その一方がもう一方に干渉を受ける、という組み合わせは他にもありそうですが、とりあえず思いついたのがこの「幅」と「描画位置」の関係でした。

 

これもまた、ここから「ブログ等で使い甲斐のあるもの」になるかどうかは…謎ですw

 

 

 

ってなとこで、今回はこのへんで!

次回もまた、よろしくお願いします^^