jQueryで塗りがアニメーションするようなギミックを作る

jQueryで塗りがアニメーションするようなギミックを作る

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になっているので、必要だったら、ダウンロードして使ってください。

ダウンロード

 

namba

田舎でプログラマーとかWebデザイナーとかやりながらWebサービスを作る人。PHP、jQueryなどの技術系の記事担当してます。 がんばって記事を書くので、リアクションしてくれると嬉しいです。

コメント