home > 投稿 > CSS3のアニメーションプロパティを動的生成するJavaScript
2011/04/25

CSS3のアニメーションプロパティを動的生成するJavaScript


CSSのアニメーションプロパティでキーフレーム指定が面倒なので、動的に指定するJSを用意しました。
動作確認環境は、Chrome、Safari、MobileSafariです。


直接記述して指定する場合
マウスオーバーすることで、赤色から緑色に変わります。
直書きなので動的に色を変更(キーフレーム指定)するようなアニメーションは出来ません。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>demo-1</title>
<style>
div#demo1 {
	width :50px;
	height:50px;
	border:1px solid #000000;
	background-color: rgb(255,0,0);
}
div#demo1:hover {
	-webkit-animation:anime-name 2s linear;
}
@-webkit-keyframes anime-name {
	0%   { background-color: rgb(255,0,0); }
	100% { background-color: rgb(0,255,0); }
}
</style>
</head>
<body>
<div id="demo1"></div>
</body>
</html>


動的にJSから生成する場合
直描きするコードと同様に色を変更するサンプルです。
折角なので色の指定をランダムに指定します。

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8" />
<title>demo-2</title>
<style>
div#demo2 {
	width :50px;
	height:50px;
	border:1px solid #000000;
	background-color: rgb(255,0,0);
}
</style>
<script src="jquery-1.5.2.min.js"></script>
<script src="dynamic-css.js"></script>
<script>
$( function(){
	//初期化
	DynamicCSS.initialize();
	//CSSアニメーションルールを追加
	DynamicCSS.appendKeyframes( "anime-name", {
		"0%"  :{ "background-color": "rgb(255,0,0)" },
		"100%":{ "background-color": _rgb() }
	} );
	//CSSClassを追加
	DynamicCSS.appendRule( ".anime-class", {
	   "-webkit-animation":"anime-name 1s ease-out"
	} );
	var $demo2 = $( "#demo2" );
	    $demo2.bind( "mouseover", function( event ){
	        $demo2.addClass( "anime-class" );
	    } )
	    .bind( "webkitAnimationEnd", function(){
		    $demo2.removeClass( "anime-class" );
		} );
} );
function _rgb(){
	var r = Math.floor( Math.random()*255 );
	var g = Math.floor( Math.random()*255 );
	var b = Math.floor( Math.random()*255 );
	return "rgb("+r+","+g+","+b+");";
}
</script>
</head>
<body>
<div id="demo2"></div>
</body>
</html>

位置、大きさ、角度を動的に変更したい場合のキーフレームの指定方法は次のようにできます。

DynamicCSS.appendKeyframes( "anime-name", {
	"0%"  :{"-webkit-transform":"translate(0px,0px) rotate(0deg) scale(1.0);"},
	"100%":{"-webkit-transform":"translate(100px,200px) rotate(300deg) scale(2.0);"}
} );
もしくは、
DynamicCSS.appendKeyframes( "anime-name", {
	"0%"  :DynamicCSS.transform(0,0,0,1.0),
	"100%":DynamicCSS.transform(100,200,300,2.0)
} );
という指定でも動きます。



サンプルファイルをダウンロード