美しさのために読み込みもコントロールしたい
静的なサイトでは、ソースが読み込まれ、テキスト・画像が順番に読み込まれ……という風に、処理がPCやブラウザの任せになってしまいます。特にニュースサイトなどコンテンツ量が多いサイトの場合、ヘッダからコンテンツ、サイドバーが表示されるときにガタガタっと表示されてしまう場合があります。
仕方ない場合もありますが、「どうせならば美しいサイトを見たい」という1ユーザーの目線で考えると、ローディング時の表示のされ方も制作者がコントロールしたいものです。
Flashでは必ずと言っていいほど使われる表現ですが、今回は静的なページで、Flashのレイヤー構造のように、div要素ごとに時間差で、しかもフェードインの動きをつけながら表示する方法をご紹介します。
サンプルの3つのポイントとファイル構成
読み込みを美しく見せるために、たとえば「ロゴを最初に表示しておいて、少しだけ時間をおいてメインビジュアルをすっと見せる」といった表現が思いつきます。良い例が以下のサイトです。
今回のサンプルは、以下の3つのステップでポイントをかんたんに体感できるものを用意してみました。
- jQueryを読み込む(jquery-1.4.2.min.js)
- functionにfadeInメソッド(フェードイン)、delayメソッド(時間差で表示)を記述する
- 対象のdiv要素をCSSで非表示にしておく
全体のファイル構成は以下のようになります。
jQueryのfadeInメソッドとdelayメソッドで速度を指定
それでは、実際にソースを見ていきましょう。
ポイントは、次のような流れで表示させている点です。
- #logoと#rightを、1秒(1,000ミリ秒)かけてフェードイン表示
- #testを、1秒待った後、0.2秒かけてフェードイン表示
このため、fadeIn、delayそれぞれの引数に、数値(ミリ秒)を指定します。以下のようにあらかじめ決められた値もあり、それを指定することも可能です。
- 遅く ⇒ fadeIn(slow)
- 通常 ⇒ fadeIn(normal)
- 速く ⇒ fadeIn(fast)
ID指定で表示時間を分ける
次に、表示時間を分けるため、「id="logo"」、「id="right"」、「id="text"」というようにIDを指定します。
CSSで対象のdiv要素を非表示に
最後に、CSSで#logo、#right、#textそれぞれをdisplay:noneで非表示に指定します。
HTML5だけでゲームが作れたり、グラフィックを描画できたりと、技術が急速に進化している気がします。今後はコーディング時にデザインフォントが使えたり、様々なトランジション効果が使えたり、動画・音声の埋め込みが容易になるなど、より繊細で自然な動き、リッチな表現が広がってきそうです。常に新しくて操作性のいい表現を模索しておきたいですね。
今回解説したサンプルファイルがダウンロードできます。