連載:Ajaxで作るインタラクティブWebアプリケーション
(2)
ズーミングできるWebフォトアルバムウィンドウを作ろう
田中 孝太郎
dotimpac.to
2006/2/1
ズームスライダーを追加する |
ここまで機能を追加すると、ずいぶんフォトアルバムアプリらしくなってきた。さらにアルバム画像の表示サイズを調節するズームスライダーも追加してみよう。こんな感じだ。
画面2 ズームスライダーサンプル(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ディレクトリ
Prototypeでのクラス継承 |
最新バージョンのscript.aculo.usには、指定したエレメントをスライダーとして使えるクラス(Control.Slider)が入っている。今回のズームスライダーは、このスライダークラスを継承して新たなクラスを定義する形で実現してみたい。ここにもPrototypeのフレームワークが用意されている。zoomslider.jsの冒頭だ。
Control.ZoomSlider = Class.create(); // SliderのプロトタイプオブジェクトをZoomSliderに継承する
Object.extend(Control.ZoomSlider.prototype, Control.Slider.prototype); // ZoomSliderの定義Object.extend(Control.ZoomSlider.prototype, { this.element = element; <ズームスライダーのDOM登録処理> // optionsにオプションを追加
// スーパークラス(Slider)の初期化
|
Object.extendという記述が随所に出てくるが、これはあるオブジェクトのプロパティに別のオブジェクトのプロパティを追加するためのPrototypeの機能だ(継承に限らず、オブジェクトにプロパティを追加する用途でどこでも使用できる)。このObject.extendで、Control.ZoomSliderのプロトタイプオブジェクトに、Control.Sliderのプロトタイプオブジェクトを追加している(4行目)。Prototypeのクラス定義では機能はすべてプロトタイプオブジェクトに記述されるので、これでZoomSliderクラスにSliderクラスの機能が継承されたことになる。
その次のObject.extendで、ZoomSlider独自の機能を記述して、さらにプロトタイプオブジェクトに追加しているわけだ。ここでSliderと同名のメソッドを書き換えることで、Sliderの動作を変更できる。またスーパークラスであるSliderの初期化を呼び出しているのが21行目である。JavaやRubyでいうところのsuper()と同様の処理だ。直前に、このSliderに渡すためにオプションをObject.extendで追加している(これは継承には関係ない)。
Prototypeのソース(prototype.js)自身がこのフレームワークで抽象クラスやサブクラスを定義して開発されているので参考にするといいだろう。上のようなクラス継承のパターンは、単一の操作であることを強調するために下のように1行にまとめて書かれることが多いようだ。
Object.extend(Object.extend |
スライダーをアルバムウィンドウへ追加 |
上のように作ったスライダークラスをアルバムウィンドウに追加しよう。
openPhoto: function(items)
{ this.viewer.innerHTML = ""; |
onZoomChange: function(v) {
} |
Control.Sliderが用意しているonChangeにonZoomChangeメソッドを登録して、スライダーが操作された際にonZoomChangeでフォトフレームの倍率を変えるようにしている。このためにウィンドウに表示したフォトフレームのオブジェクトをthis.imagesの配列に格納しておく。onZoomChangeではそのimagesのオブジェクトに対して、それぞれフォトフレームの大きさを変更するsetSizeを呼び出しているだけだ。
以上、今回の解説で、フォトアルバムの表示や操作の機能についてはほぼ完成した。次回の第3回では非同期サーバ通信を実現して、アプリケーションとして完成させていきたい。
3/3 | 次回もお楽しみに |
INDEX |
||
Ajaxフォトアルバムのフェードイン画像フレームを作ろう | ||
Page1<A前回作った部品をフォトアルバムに拡張しよう> JavaScriptライブラリの状況補足 |
||
Page2<フォトアルバムウィンドウ サンプルデモ>
ファイル構成/イベントの解除とフェードアウト/指定要素の位置まで画面をスクロールするエフェクト |
||
Page3<ズームスライダーを追加する>
ファイル構成/Prototypeでのクラス継承/スライダーをアルバムウィンドウへ追加 |
古くて新しいAjaxの真実を見極める 「Webインターフェイスの新しい手法」「画期的なWebアプリケーションの仕組み」であるとして開発者たちの人気を集めるAjaxとは何なのか、その真実を見極めてみよう 最終更新 2005/8/2
|
HTML5 + UX フォーラム 新着記事
- GASで棒、円、折れ線など各種グラフを作成、変更、削除するための基本 (2017/7/12)
資料を作る際に、「グラフ」は必要不可欠な存在だ。今回は、「グラフの新規作成」「グラフの変更」「グラフの削除」について解説する - GET/POSTでフォームから送信された値をPHPで受け取る「定義済みの変数」【更新】 (2017/7/10)
HTMLのフォーム機能についておさらいし、get/postメソッドなどの内容を連想配列で格納するPHPの「定義済みの変数」の中身や、フォーム送信値の取り扱いにおける注意点について解説します【PHP 7.1含め2017年の情報に合うように更新】 - PHPのfor文&ループ脱出のbreak/スキップのcontinue【更新】 (2017/6/26)
素数判定のロジックからbreak文やcontinue文の利点と使い方を解説。for文を使ったループ処理の基本とwhile文との違い、無限ループなども併せて紹介します【PHP 7.1含め2017年の情報に合うように更新】 - Spreadsheetデータの選択、削除、挿入、コピー、移動、ソート (2017/6/12)
Spreadsheetデータの選択、挿入、削除、コピー、移動、ソートに使うメソッドの使い方などを解説する
|
|