|
Webデザイン 表現&技法の 新・スタンダード
|
|
|
|
|
Lesson 6 |
|
|
Lightbox風に 画像表示を演出する |
|
制作・文 |
|
|
河原 覚(株式会社アークフィリア) |
> |
To Use |
|
|
CSS | JavaScript |
> |
Browser |
|
|
IE 6over | Firefox 3over | Safari 5over |
|
画像表示の演出としてよく利用されるLightboxだが、多彩な派生バージョンが存在し、要件にマッチするものを選ぶのには苦労する。そんなときは、jQueryを利用して自作してみるのも手だ。 |
01
まずはscriptタグでjQueryをロード。Lightbox本体となるlightbox.js、CSSもロードしよう【1-1】。展開元になるHTMLを作成する。サムネイル画像に大きい画像のリンクを張り、それをulでリスト化したもので構成しよう【1-2】。
【1-1】CJavaScript,cssの読み込み 【1-2】Lightboxを開く画像リスト
02
lightbox.jsを記述していく。まずはDOMツリー構築後に処理されるように$(function(){と});で全体を囲んでおこう【2-1】以降、すべてのJavaScriptはこの中に記述することにする。
【2-1】DOMツリー構築後に処理をするため、以降のJavaScriptはこの内側に記述する
03
04
次にクリックされたときの状態を記録しておこう。クリックされたリンクがグループの中の何番目であったかと、グループ内の総数も記録しておく。また、ウィンドウのサイズ、スクロール位置も保存しておく【4-1】。
【4-1】クリック発生時の状態を保存
05
全画面に展開するレイヤーを作っていく。html要素とbody要素にlbActiveクラスを設定する。lbActiveクラスには、 overflow:hiddenが設定されており、レイヤー展開中にスクロールをさせないための設定だ【5-1】【5-2】。
【5-1】htmlとbodyのスクロールを防止【5-2】overflowの設定
06
07
まずは背景を非表示の状態にし、サイズと縦位置を保存しておいたウィンドウサイズと揃え、bodyにアペンドして、フェードインのエフェクトを設定する。続けて背景をクリックした際にレイヤーを閉 じるためのクリックイベントも設定する【7-1】。html,bodyに設定したクラスを消去し、展開するレイヤーの双方をフェードアウトが終わった段階で消去するように設定する。
【7-1】背景の初期設定とクリックイベント
08
次に写真表示部だ。背景と同じように非表示にした後、サイズと位置を設定する。最初のサイズは任意でよい。位置はそのサイズと、ウィンドウサイズの差分の半分を設定し、スクロール位置を加算してセンターに表示されるようにする。bodyにアペンドし、フェードインエフェクトを設定しよう。ローディング画像も写真表示部のセンターになるように調整し、前後移動のナビゲーションの横幅は表示部に合わせておく【8-1】。
【8-1】表示部の初期設定
09
画像のローディングを設定していくが、その前にあらかじめ現在時刻を設定しておく。これは特定のブラウザで画像の キャッシュがあった場合にローディングイベント等が発生しない状態を回避するのに、画像のロードごとに違う数値をパラメータとして設定するためだ。img要素にはcurrentImageというidを設定し、クリック対象のhref要素にキャッシュ回避の現在時刻を?でつないだ文字列をsrcとして設定する【9-1】。
【9-1】キャッシュ回避用の現在時刻と画像の生成
10
ロードイベントでは、まずローディング画像を非表示に、#Imageにアペンドしてフェードインエフェクトを設定する。表示部のサイズを読み込まれた画像サイズに揃え、ウィンドウサイズとの差分をとって センタリングしなおし、ナビゲーションの幅も揃える【10-1】 。
【10-1】ロードイベント
11
12
#currentImageを非表示にし、グループの中から新たなcurrentIndexで指定されたhrefを指定。新たな画像がロードされるようにすれば完成だ【12-1】【12-2】 。
【12-1】新しい画像のロード【12-2】完成した状態をブラウザで表示した図