Dropと聞けばサクマのドロップ缶か、肝油ドロップを思い浮かべる、ユゲタです。
どちらも今でもありますが、昭和の匂いがプンプンするので、懐かしさ爆発ですね。
(知らない人すみません)
CSSのアニメーション機能をバカにしている人に今回は、少しレベルの高い、通常のアニメーションで作るのも難しいドロップアニメーションをご紹介します。
まるで丸の画像がモーフィングしているような感じで、ターミネーターのT-1000のような、ドロドロとした粘着質の物質を思い浮かべる人も多いでしょう。
これは、SVGのblur機能というのを使って一定の値に近くなると線を繋いでくれるという特性を活かしたアニメーションになっています。
見た目を縦にすると、水道から滴り落ちる水滴と表面張力などのような感じにすることもできますね。
ちなみに、丸を複数増やしても動作する様にしているので、やってみたい人は、SVGなどを弄り倒してください。
一つだけ注意点があり、正常に表示されないブラウザがあるので、古いブラウザや、いわく付きのブラウザでの閲覧はご遠慮ください。
ソース
sample.html
<div class="loading">
<div class="drop">
<div class="start"></div>
<div class="mid"></div>
<div class="mid"></div>
<div class="end"></div>
</div>
<svg style="position: absolute;" xmlns="http://www.w3.org/2000/svg" version="1.1">
<defs>
<filter id="water">
<feGaussianBlur in="SourceGraphic" stdDeviation="10" result="blur"></feGaussianBlur>
<feColorMatrix in="blur" mode="matrix" values="1 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 0 19 -9" result="goo"></feColorMatrix>
<feComposite in="SourceGraphic" in2="goo" operator="atop"></feComposite>
</filter>
</defs>
</svg>
</div>
<style>
.loading{
filter:url(#water);
position:relative;
top:10px;
left:10px;
}
.drop{
position:relative;
width:200px;
height:64px;
}
.drop > .start,
.drop > .end{
position:absolute;
width:64px;
height:64px;
background-color:#1DA9F1;
border-radius:50%;
}
.drop > .start{
left:0;
}
.drop > .end{
right:0;
}
.drop > .mid{
position:absolute;
width:32px;
height:32px;
top:16px;
left:0;
background-color:#1DA9F1;
border-radius:50%;
animation: drop-mid 2s ease-in-out infinite;
}
.drop > .mid:nth-child(2){
border-radius:1px solid black;
animation-delay: 1s;
}
@keyframes drop-mid{
0%{
left:32px;
}
100%{
left:calc(100% - 64px);
}
}
</style>
# 解説
class=”mid”が移動している水滴ですが、2つ置いて、animation-delayでずらしながら表示しています。
1つだと、なんとなく間の抜けたアニメーションだったので、2つにしていますが、距離を大きくして数を増やしても面白いかもしれません。
あとは、class=”loading”エレメントを画面の中央にして、背景に半透明blackなどをセットすると、loadingで利用できるようになると思います。
贅沢を言えば、loadingの時に欲しいprogress値ですかね?次回はそういうインターフェイスのloadingを作ってみるとしよう。
デモ
関連リンク
他のNowLoadingも見る
0 件のコメント:
コメントを投稿