CSSのtransitionを使ってアニメーション

53d6cfae0180c5d91ce80257a393369d_s
最近transitionが楽しくなってきたからその記述について

transitionとは

http://www.htmq.com/css3/transition.shtml
CSSによってアニメーションさせる時に使用するプロパティ。前提として、jsを使用するのが基本。
例えば、

<div class="test left"></div>
.test {
	position: absolute;
	height: 50px;
	width: 50px;
	background-color: #000;
}
.left {
	left: 0%;
}
.right {
	left: 100%;
}
$(function() {
	setTimeout(function(){
		$(".test").removeClass("left");
		$(".test").addClass("right");
	},1000);
});

これを実行すると、画面一番左に存在している黒い四角が、1000ミリ秒後に一番右にパッと移動する。
でも、パッと移動させるんじゃなくてすーっと画面を横切るようにしたいとする。
そうした時にtransitionの出番。

<div class="test left"></div>
.test {
	position: absolute;
	height: 50px;
	width: 50px;
	background-color: #000;
	transition-property: left;
	transition-duration: 10s;
}
.left {
	left: 0%;
}
.right {
	left: 100%;
}
$(function() {
	setTimeout(function(){
		$(".test").removeClass("left");
		$(".test").addClass("right");
	},1000);
});

いじったのはCSSだけ。これで「黒い四角が1000ミリ秒後に移動開始、10秒かけて右に移動する」という動きになる。
ざっくりいうと、
transition-propertyはtransitionしたいプロパティを指定。
transition-durationは何秒かけるか。

で、ここからが本番。

CSSにはtransformプロパティというものが存在する。
まあ、ざっくりいうと変形に関するプロパティで、横を伸ばしたり縦を伸ばしたりズームしたり回転したりするプロパティ。
これと組み合わせれば何秒かけて要素がズームするとか、回転するとか、そうした面白い動きが実装できる。
さらにもう1つ。javascriptでtransitionEndを検出することで、transitionが終了した時に関数を実行できたりする。

以下、サンプルコード

<div class="test"></div>
.test {
	position: absolute;
	height: 50px;
	width: 50px;
	background-color: #000;
	-moz-transition: -moz-transform 2s linear;
    -webkit-transition: -webkit-transform 2s linear;
    -o-transition: -o-transform 2s linear;
    -ms-transition: -ms-transform 2s linear;
    transition: transform 2s linear;
	webkitTransform:scale(1.0);
	mozTransform:scale(1.0);
	oTransform":scale(1.0);
	transform":scale(1.0);
}
.zoom {
	webkitTransform:scale(1.5);
	mozTransform:scale(1.5);
	oTransform":scale(1.5);
	transform":scale(1.5);
}

$(function() {
	setTimeout(function(){
		$(".test").addClass("zoom");
	},1000);
	var flag = 0;
	$(".test").bind("oTransitionEnd mozTransitionEnd webkitTransitionEnd transitionend",function(){
		if(flag == 0) {
			flag = 1;
			alert("hoge");
		};
	});
});

ざっくりこんな感じ。
まず、1000ミリ秒後に.testにzoomを追加。するとscaleのアニメーションが始まる。scaleは拡大縮小に関するプロパティ。
2秒かけて1.5倍に拡大した後、transitionendが発火。hogeというalertが鳴る。簡単だね。
注意事項としては、サンプルでいうflag及びそれによるif文。これがないと、ブラウザによっては2回3回とalertが鳴ってしまう。

例えばここでいうalertの部分をさらにtransition操作するものにしたりとか、ページジャンプするものにしたりとか、スクロールさせるものにすると面白いコンテンツが作れそう。
ただ、transitionはIE9以下は対応していないので、if文で分岐させて何か処理をさせる必要がある。

では

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。名前及びコメントは必須項目、メールアドレス及びサイトURLは任意です。