
連載:Ajaxで作るインタラクティブWebアプリケーション
(2)
ズーミングできるWebフォトアルバムウィンドウを作ろう
田中 孝太郎
dotimpac.to
2006/2/1
| フォトアルバムウィンドウ サンプルデモ |
- - PR -
今回もサーバ通信を行っておらず、サーバからのレスポンスを想定したデータを渡すと、サムネイルの一覧表示を行うPhotoAlbumクラスを用意した。画像表示部分は前回で解説したフェードイン画像フレームを、基本的にはそのまま使用している。
また、サムネイルの画像をクリックすると、選択した画像の拡大表示が、サムネイルウィンドウの下にフェードインで追加されるようになっている。見たい写真を順番に開いて一覧したり、不要なものを閉じたりできるわけだ。これは筆者がpiccyを開発するとき、JavaScriptを活用したWikiエンジンであるTiddlyWikiやLesserWikiのページ開閉の動作(Wikiページのリンクをクリックすると、対応するWikiページがクリックしたページの下に追加される)をヒントにフォトアルバムに利用したスタイルで、ページの構成をダイナミックに変化させることができるJavaScriptの特性を生かしたインタラクティブな機能になっていると思うが、どうだろうか。
| 画面1 サムネイル一覧サンプル(WindowsIE6、Firefox1.0、Safari1.3.1で動作確認済) |
■ファイル構成
- photoalbum.html ベースのWebページ、スクリプトのインクルード、フレームのテンプレートを記述
- photoalbum.css フォトアルバムやフレームのスタイルを記述(インラインスタイルから分離した)
- jsディレクトリ
- prototype.js
- scriptaculous.js
- photoframe.js PhotoFrameクラスのスクリプト(前回解説)
- photoalbum.js PhotoAlbumクラスのスクリプト(新規追加)
- data.js アルバムに表示する画像データ
- imagesディレクトリ
| イベントの解除とフェードアウト |
前回のファイル構成に加えて追加されたphotoalbum.jsを見ていこう。ここでPhotoAlbumクラスの定義を行っている。特に新規の手法はなく、前回のPhotoFrameクラスと同様にPrototypeのフレームワークと、script.aculo.usのエフェクトを使用している。
受け取ったデータを処理してフォトフレームを並べる部分を見ておこう。
openPhoto: function(items) { // フォトフレーム表示
if(items.images) { // サムネイル一覧表示処理
// データファイルのimages(画像ファイル配列)について処理
} }
|
データにある画像ファイルの数だけPhotoFrameクラスをループで生成して一覧表示し、更新後のハイライトをscript.aculo.usのエフェクトで行っている。
今回追加された操作のうち、大きなものとして、ウィンドウを閉じて要素が消滅する処理がある。ここも見てみよう。
close: function()
{ // ウィンドウクローズ |
イベント解除メソッドEvent.stopObservingはPrototypeの機能であり、前回説明したイベント登録メソッドEvent.Observeに対応するものだ。通常のWebページよりも1つのページに長くとどまり、連続的な操作を行う可能性の高いAjaxアプリケーションでは、実行時に生成したオブジェクトやDOM要素、登録したイベントなどは不要時には削除し、メモリを解放していく必要がある。またInternet Explorer 6では、DOM要素に対する循環参照がなされていると、ページを閉じてもメモリが回収されずブラウザの動作が遅くなるという問題が発見されている(IEのメモリリーク問題など参照)。このような事態を避けるためにもイベントや要素の管理は慎重に行った方がいいだろう。
※なお、PrototypeにはEvent.observeで登録されたイベントについては、ページのアンロード時にイベントを解除する機構が組み込まれている。
Effect.Fade()は前回説明のEffect.Appear()と逆に、要素のフェードアウトを行うscript.aculo.usのエフェクトだ。オプションのafterFinishに、フェードアウト終了後に行うDOM要素の削除処理を行うコールバックを無名関数で渡している。
| 指定要素の位置まで画面をスクロールするエフェクト |
前回のサンプルと違い、今回はアルバムのウィンドウが複数登場するため、ウィンドウが1画面に収まらない場合が出てくる。そこで、script.aculo.usに最近追加されたスクロールインエフェクトを使用してみた。initializeの部分だ。
// すでに表示されたPhotoAlbumが呼び出された場合は、 |
Effect.ScrollToというのがscript.aculo.usのエフェクトで、引数に指定した要素が画面に表示される位置までスクロールしてくれる。ほかのscript.aculo.usエフェクト同様、このエフェクトにもオプションを引数で渡すことで細かい動作を指定することができ、ここではスクロール終了後(afterFinish)に対象をハイライトする処理を加えた。これでクリックした画像が画面外にスクロールアウトしている場合でも、対象を見失うことがなくなるはずだ。
● Effect.ScrollToリファレンス
| 2/3 |
|
INDEX |
||
| Ajaxフォトアルバムのフェードイン画像フレームを作ろう | ||
| Page1<前回作った部品をフォトアルバムに拡張しよう> JavaScriptライブラリの状況補足 |
||
| Page2<フォトアルバムウィンドウ サンプルデモ>
ファイル構成/イベントの解除とフェードアウト/指定要素の位置まで画面をスクロールするエフェクト |
||
| Page3<ズームスライダーを追加する>
ファイル構成/Prototypeでのクラス継承/スライダーをアルバムウィンドウへ追加 |
||
AjaxでつくるインタラクティブWebアプリケーション バックナンバー
- 第1回 Ajaxフォトアルバムのフェードイン画像フレームを作ろう
- 第2回 ズーミングできるWebフォトアルバムウィンドウを作ろう
- 最終回 JSONによるデータ通信でAjaxアルバムを完成させる
AjaxとPHPでリッチクライアント
Ajaxを扱うためのサーバーサイドのPHPライブラリを紹介する。リリースされたライブラリ、AjaxACを活用して好みの検索窓に改造してみよう
最終更新 2006/4/29
Ajax うきうき Watch
Ajaxという流行技術の定義を明確にしながら、Ajaxの動向からうきうきするような面白いもの、確実に押さえておきたいものを厳選してお届けしていく
- 第1回 Webアプリのユーザビリティを改善しまくるAjax
- 第2回 Ajax、それはWeb 2.0へと続く道
- 第3回 どんなに無茶をやっても「それもありかな」なAjax
- 第4回 自動車業界のAjaxを活用したキャンペーンを目撃せよ
- 第5回 “どのブラウザでも動くAjax”を共有財産として育てよう
- 第6回 プロプライエタリ2.0から考えるAjaxの公開/非公開部
- 第7回 メモリリークが小さくなったGoogle Maps APIの新版
- 第8回 “CGUI” 消費者が作り出すUIの時代突入
- 第9回 巨大化するAjaxライブラリをシンプルにする新たな流れ
- 第10回 地図のように年代を移動できるMITのAjax歴史年表
- 第11回 JSONがRFCになり、どんどんこなれるAjaxサービス
- 第12回 サーバが通信を開始できるComet活用Webチャット
- 第13回 オンラインゲームで検索精度を上げるGoogleの巧みさ
- 第14回 IE7とFirefox 2への利用者の大移動は起こるか?
- 第15回 グーグル検索エンジンを特定ジャンル専用に、Co-op
- 第16回 帯域やデバイス領域をフル活用させる“モバイルAjax”
- 第17回 新しい技術を模索するYahoo!、Google、MS
- 第18回 Ajaxの高度な使用例、Yahoo! pipes
- 第19回 Apollo参戦でウィジェット開発者の争奪戦が激化
- 第20回 Twitter登場で注目されるRTコミュニケーションツール
- 第21回 過熱するTwitterブームとMicrosoftのマッシュアップ
- 第22回 iPhoneのAjax戦略、そして今日もWeb APIは増加する
- 第23回 Ajax開発者がヒーローになるとき、それはいま!
- 第24回 携帯電話への拡張を進めるGoogleとWeb隠しコマンド
- 第25回 Ajaxで加速!? エンタープライズ2.0とWebOSの普及
- 第26回 「言葉」を超えた説得力を持つAjaxの存在感と広がり
- 第27回 ゲームから読み解く、俺スクリプト時代の知的な挑戦
- 第28回 マッシュアップ元年が終わり、2008年はどうなる?
- 第29回 Twitterやクラウドへも分岐するAjax/Web APIの道
- 第30回 Ajaxはじめて物語、そしてサーバでも動くJavaScript
- 第31回 新ブラウザ戦争はon fireだがJavaScriptはoffのナゾ
- 第32回 Google App EngineはAjaxへのハードルを下げるか?
- 最終回 Pure JavaScriptの動画再生やRPGも好きでした
最終更新 2008/5/26
| 古くて新しいAjaxの真実を見極める 「Webインターフェイスの新しい手法」「画期的なWebアプリケーションの仕組み」であるとして開発者たちの人気を集めるAjaxとは何なのか、その真実を見極めてみよう 最終更新 2005/8/2
|
||
TechTargetジャパン
リッチクライアント & 帳票 フォーラム 新着記事
- 次のモバイルアプリはどのフレームワークで作る? (2012/5/24)
スマホアプリの開発を容易にするJavaScriptのフレームワークが続々と増えている。それぞれの良さや仕組み、何がどこまでできるのかを徹底解剖する - 「LESS&専用エディター」でCSSをシンプルに書こう (2012/5/23)
「LESS」はCSS初心者に向けた、シンプルなライブラリだ。「LESS」で、変数などのプログラミングの基礎的な考え方もCSSで学ぼう - 学校が世界一のデジタル環境になったら (2012/5/18)
授業はアーカイブに蓄積され、家からも見られる。家族が授業テーマのアイデアを出す。そんな姿が実現されるかもしれない - 1000万ドル調達も夢じゃないクラウドファウンディング (2012/5/15)
クラウドファンディングは、寄付型でも投資型でもない「購入型」が主流。商品を“開発する前に販売”して開発費用を集める逆転のシステムだ
|
|
@IT 新着記事
キャリアアップ
スポンサーからのお知らせ
イベントカレンダー
お勧め求人情報
転職/派遣情報を探す
**先週の人気講座ランキング**
〜 Android編 〜
ホワイトペーパー(TechTargetジャパン)
ソリューションFLASH
