Flashでよくやっていた表現で、jQueryで置き換えられるものはないかと考えていて、ふとコレを思いついたので紹介します。応用次第ですので、アイディアのネタとして見てください。
今回も、言葉で表現しにくいので、↓のデモをモダンブラウザで見てください。
マウスオーバでアニメーションします。
作り方
このアニメーションは、同じサイズのPNGファイルを2つ重ね、後ろの画像をアニメーションさせることで、実現しています。
前面画像の白い部分は、透明になっていて、背景画像が透き通ってみえるようになっています。その状態で、背景画像をアニメーションさせることで、塗りがアニメーションしているように見えるというからくりです。
HTML+CSS
いたってシンプルです。前面画像をコンテナDIVで囲み、コンテナDIVに背景画像を設定しています。
<!DOCTYPE html> <html lang="ja"> <head> <style type="text/css"> #box { width: 200px; background: url(bg.png) no-repeat; background-position: 0 165px; } </style> </head> <body> <div id="box"><a href="#"><img src="heart.png" /></a></div> </body>
jQuery
jquery backgroundPosition を使い、マウスオーバーのタイミングで animate を使って背景画像のポジションを上方向にアニメーションさせています。
$(function() { $('#box').hover(function() { $(this).stop().animate({ backgroundPosition: "0px 0px" }, 500); }, function() { $(this).stop().animate({ backgroundPosition: "0 165px" }, 500); }); })
CSS3アニメーションで実装する
jQueryを使わずに、CSSアニメーション(Transition)で実装する場合のCSSは、↓のようになります。こっちの方がシンプルですね w。
#box { width: 200px; background: url(bg.png) no-repeat; background-position: 0 165px; -webkit-transition: background-position 500ms linear; -moz-transition: background-position 500ms linear; -o-transition: background-position 500ms linear; } #box:hover { background-position: 0 0; }
まとめ
うぅーん…CSS3で、簡単に使えるマスクが標準的にサポートされればなぁとしみじみ思いました。
今回紹介したテクニックは、背景画像をグラデーションやストライプ・写真にするとかアイディア次第で、いろんなことに応用できそうなので、いろいろ考えてみると面白いと思います。個人的には、これを使ってローディング(33% Loading)のアニメーションを作ってみたいと思いました。
この記事で紹介したサンプルは、まとめてダウンロードもできます。こちらは、完全なHTMLになっているので、必要だったら、ダウンロードして使ってください。
コメント