WEBOPIXEL

jQuery/CSS3で雲をゆらゆらさせる

Posted: 2013.03.29 / Category: javascript / Tag: ,

雲の画像を背景に設定してゆらゆらさせてみました。
jQueryバージョンとCSS3バージョンでお送りいたします。

Sponsored Link

画像の作成

demo

はじめに雲の画像を用意します。
パララックス的にした方がクールだと思ったので大きい画像と小さい画像を作成しました。
わかりやすいように背景がブルーになっていますが、実際は透過pngです。

作成した雲画像

ちなみに雲の素材はこちらの素材サイト様からお借りいたしました。

商用フリーで使える影絵素材サイト シルエットデザイン

jQueryバージョン

最初はjQueryバージョンです。
画像が2つあるのでdivを2つ作成して適当なidを割り当てます。

html

	<div id="main-img"><div id="bg"></div></div>
	

CSSはそれぞれのdivに作成した画像を「background」に割り当てましょう。

css

	#main-img {
		width: 800px;
		margin: 0 auto;
		background: #9bd6e9 url("bg2.png");
	}
	#main-img #bg {
		height: 250px;
		background-image: url("bg1.png");
	}
	

jQueryでは「animate」を設定した「cloudMove」という関数を「setInterval」で定期的に実行するようにすれば完成です。
「setInterval」の実行タイミングは「animate」タイムの合計にしておきましょう。

javacript

	<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
	<script type="text/javascript">
	$(function() {
		var bg1 = $('#main-img');
		var bg2 = $('#bg');
		var speed = 3000;
		cloudMove();
		setInterval(cloudMove, 6000);
		function cloudMove(){
			bg1
				.animate({backgroundPosition:'60px'}, speed)
				.animate({backgroundPosition:'0'}, speed);
			bg2
				.animate({backgroundPosition:'120px'}, speed)
				.animate({backgroundPosition:'0'}, speed);
		}
	});
	</script>
	

どうでしょう。ゆらゆらしてますか!
雲が左右に動くのはものすごく不自然ですが、なんとなく雰囲気出てるんじゃないですかね!!

CSS3バージョン

demo

次にCSS3バージョンです。
CSS3なら複数画像を指定できますのでdivは一つでも大丈夫です。

html

	<div id="main-img"></div>
	

複数画像の指定はいつも使う「background-image」に「,」で区切って並べるだです。簡単ですね。
「-webkit-animation」ではアニメーションの設定をします。
1つ目のオプションは、どのキーフレームを使用するか指定します。ここで指定している「cloudMove」は後述します。
2つ目はアニメーションスピードで、3つ目の「infinite」は無限にアニメーションを続けるという指定です。

css

	#main-img {
		width: 800px;
		height: 250px;
		margin: 0 auto;
		background-color: #9bd6e9;
		background-image: url("bg2.png"), url("bg1.png");
		animation: cloudMove 8s infinite;
	}
	

最後に「@keyframes」でキーフレームの設定をします。
先ほどの「animation」で設定した「cloudMove」という名称で作成しましょう。
また実際使用するには「@-webkit-keyframes」などベンダープレフィックスを追記する必要があります。

css

	@keyframes cloudMove {
		0% {background-position: 0 0, 0 0;}
		50% {background-position: 40px 0, 80px 0;}
		100% {background-position: 0 0, 0 0;}
	}
	

動かすのは背景画像なので「background-position」です。
0→40px→0と初期地点に戻すことでループしても違和感なくアニメーションできます。
「background-image」を2つ指定したので、「keyframes」の各プロパティも「,」で句切って2つずつ指定します。

CSS3で無限スクロールバージョン

demo

以前「jQueryで背景画像をアニメーションで無限ループさせる」といのを作ったりしましたが、先ほどのをちょっとカスタマイズすればCSS3で簡単にできてしまいます。

css

	#main-img {
		...
		animation: cloudMove 8s linear infinite;
	}
	@keyframes cloudMove {
		0% {background-position: 0 0, 0 0;}
		100% {background-position: 400px 0, 800px 0;}
	}
	

先ほどの動きは慣性がついてアニメーションしていましたが、「animation」で「linear」を指定することで均一になります。
「keyframes 」では100%の時点で「400px(画像のサイズ)」を指定すれば無限に続いているようにスクロールします。