【ハウツー】
今回は、transitionプロパティを使って、実際に案件でも使えそうなテキストエフェクトを作ってみます。
このサンプルでは、横並びに配置したテキストを、JavaScriptを使って、一つずつtransitionさせています。今回のエフェクトも、transitionプロパティを使うと、数行程度のJavaScriptで実装できてしまいます。
※今回も、CSS3の「transitionプロパティ」に対応した「Firefox」「Chrome」「Safari」でしか動作しません。残念ながら現時点ではIEは「transitionプロパティ」には対応していません。
では早速記述を見てみます。
<style>
#wrap
{
margin:50px;
}
#wrap div
{
display:none;
float:left;
transform:translate(0px,-50px);
opacity:0;
transition:all 500ms ease-out;
}
p{
font-size:12px;
cursor:pointer;
width:100px;
padding:5px;
text-align:center;
background:#CCC;
}
</style>
</head>
<body>
<p>開始</p>
<div id="wrap">
<div class="text0">W</div>
<div class="text1">e</div>
<div class="text2">b</div>
<div class="text3">テ</div>
<div class="text4">ク</div>
<div class="text5">講</div>
<div class="text6">座</div>
</div>
</body>
テキストを、個々のdivタグに入れて、float配置し、translateで位置を、opacityで透過の設定を行います。 ここで、なぜdivのfloatにするかというと、translateの設定がブロックレベル要素にしか対応していなかったためです。
図にすると下のようになります。
![]() |
また、各div要素にdisplay:none;を設定していますが、これに関しては後のJavaScriptの解説の時に説明します。
ではJavaScriptの記述を見てみましょう。
<script>
$(function ()
{
$("p").bind("click" , function(e)
{
textEffect();
});
//時間差で表示blockに戻す。
setTimeout(function(){
for(var i = 0 ; i < 7 ; i++)
{
var target = ".text" + i;
$(target).css("display" , "block");
}
}, 100);
});
//テキストエフェクトを実装
function textEffect()
{
//アニメーションの実行を200ミリ秒間隔で実行
var id = setInterval(loop , 200);
var counter = 0;
function loop()
{
var target = ".text" + counter;
$(target).css({"opacity":"1" , "transform":"translate(0px,0px)"});
counter++;
//カウンタが、テキストの数より大きい場合、処理を止める。
if(counter > 6)
{
clearInterval(id);
}
}
}
</script>
まずは、ドキュメントが読み込まれたら、以下の処理で初期化します。
$(function ()
{
$("p").bind("click" , function(e)
{
textEffect();
});
//時間差で表示blockに戻す。
setTimeout(function(){
for(var i = 0 ; i < 7 ; i++)
{
var target = ".text" + i;
$(target).css("display" , "block");
}
}, 100);
});
Pタグにクリックイベントを渡して、「setTimeout」で、時間差でテキストを表示状態に直します。
「setTimeout」は、ある処理を時間差で実行したいときに利用します。
書式は、
「setTimeout(実行したい関数 , 実行までの時間[1/100秒単位])」
なぜわざわざこんな処理を入れるかというと、ドキュメントが読み込まれた直後に、translate(0px,-50px)、opacity:0のtransitionが実行されてしまうためです。
ですので、最初は非表示にしておいて、アニメーションが実行されても見えないようにしておきます。
複雑なtransitionを組んだ場合は、親要素ごと非表示にするといいでしょう。
あとは、for文を使って、テキストにスタイルを当てています。 一応、初心者の為に、簡単に解説すると、for文とは、
for(変数宣言、初期化 ;ループ条件 ; ループ時実行処理)
{
処理
}
という記述を行い、ループ条件を満たすまで処理を繰り返します。 このとき、変数宣言、初期化した変数を使えるため
var target = ".text" + i;
この記述で、「text0」「text1」にアクセスできる訳です。
次に、テキストエフェクトの処理の解説に入ります。
//テキストエフェクトを実装
function textEffect()
{
//アニメーションの実行を200ミリ秒間隔で実行
var id = setInterval(loop , 200);
var counter = 0;
function loop()
{
var target = ".text" + counter;
$(target).css({"opacity":"1" , "transform":"translate(0px,0px)"});
counter++;
//カウンタが、テキストの数より大きい場合、処理を止める。
if(counter > 6)
{
clearInterval(id);
}
}
}
「setInterval」を使って時間差で、テキストのプロパティを変更して、transitionを実行します。
「setInterval」は「setTimeout」と似た記述をしますが、「setTimeout」と違うのは、名前が示す通り、設定した時間をインターバルにして、指定した処理を繰り返します。
つまり、今回のコードでは、
var id = setInterval(loop , 200);
「loop」という関数を200ミリ秒ごとに繰り返すという意味です。 さらに「setTimeout」と違う点が、「var id = 」で取得したidを使い
clearInterval(id);
上記記述で、繰り返し処理を止めることができる点です。 まあ、当然といえば当然で、繰り返し処理なのですから、実行を止められないと、処理が重くなって、最悪ブラウザが落ちてしまうなんてこともありますからね。
今回は、繰り返し処理をするたびに「counter」という変数を監視して、テキストの数を超える場合に処理を止めるようにしています。
今回のサンプルでは、デバイステキストを使っているので、ブラウザによっては半角英語の位置がおかしくなったりするかと思います。
実際に案件で使おうと思ったら、Webフォントなどと組み合わせて使ったり、画像を使うなりの工夫は必要になるでしょう。 しかし、CSS3のtransitionを使えば、今までFlashかjQueryのanimateくらいしか選択肢がなかったアニメーションエフェクトを実装できます。
特にスマートフォン端末では、jQueryのanimateだと、処理が重くてガクガクでした。しかし、transitionプロパティを使うことで、スマートフォンでもオープニングエフェクトを実装することができるということです。
河野 義貴
インハウスのFlashクリエイターとして勤務後、2010年独立。一年間のフリーランス期間を経て、2011年9月にスウィーツアンドストリーム株式会社を設立。主にFlash・HTML5を駆使した、PC・スマートフォン向けインタラクティブコンテンツを中心に活動中。マイナビクリエイターセミナー(WCBセミナー)の講師としてもおなじみ。
| 【ハウツー】クリエイターのためのWebテク講座 -CSS3のtransitionプロパティを使ってみよう。 [2012/7/2] |
| 【ハウツー】クリエイターのためのWebテク講座 - 動画ファイルの作成について。 [2012/6/25] |
| 【ハウツー】クリエイターのためのWebテク講座 - videoタグを使った、プレイリストの作成 [2012/6/18] |
| 【ハウツー】クリエイターのためのWebテク講座 - videoタグを使って、Flash無しでビデオ再生 [2012/6/11] |
| 【ハウツー】クリエイターのためのWebテク講座 - jQueryを使ってフォトライブラリを作ろう [2012/6/4] |
| 【レポート】フジに続きTBSでは出水アナをイメージした3Dキャラクターを導入? - 人の表情をカメラで読み取る「リアルタイムアバターシステム」 [19:49 5/21] |
| キヤノンら、重要文化財「竹に虎図襖」などの高精細複製品を天球院に寄贈 [16:52 5/21] |
| 音楽制作ソフトウェア「Singer Song Writer Lite 8」の試用版を公開 [16:36 5/21] |
| 8つのエフェクト同時演奏可能なアプリ「Turnade for iPad」発売 [15:58 5/21] |
| アドビ、iOS向け「Adobe Ideas」を無償化 - 購入者には払い戻し対応も [15:10 5/21] |
|
LINE、シューティングゲームアプリ「LINE GoGo! TwinBee」を提供開始 [20:41 5/21] 携帯 |
|
上海問屋、スマホとタブレットを4台同時に充電可能なシガーソケット充電器 [20:36 5/21] パソコン |
|
【レポート】新「AQUOS」が実現するフルHDモデルとは別次元の精細感! - シャープ、4K対応「AQUOS UD1」発表会を開催 [20:17 5/21] 家電 |
|
ネットジャパン、MacでWindows専用アプリを利用できる「CrossOver Mac 12」 [20:17 5/21] パソコン |
|
【レポート】フジに続きTBSでは出水アナをイメージした3Dキャラクターを導入? - 人の表情をカメラで読み取る「リアルタイムアバターシステム」 [19:49 5/21] クリエイティブ |