Script.aculo.usは、Thomas Fuchs氏を中心とするチームにより開発されているJavaScriptライブラリだ。MITライセンスが採用されており、2005年から公開を始め、執筆時点では11月に公開されたバージョン1.8が最新版になる。本稿では、そのバージョン1.8を使って(連載継続中にバージョンアップした場合はそちらに変更する可能性がある)、同ライブラリの基本を6回にわたって紹介しよう。

なお、Script.aculo.usを扱ううえでの必須知識となるPrototype.jsの使用法については、連載『いまからはじめるPrototype.js』で解説しているので、そちらをご覧いただきたい。

Script.aculo.usの概要

Script.aculo.usはPrototype.jsをベースに動作するライブラリだが、Prototype.jsが1つのファイルにすべての機能をまとめているのに対し、Script.aculo.usは8つのファイルに分かれている。それだけ多彩な機能を持っているということだ。スクリプトの容量をすべて合わせると約160KBになる。

単体でもAjaxian.comの2006年と2007年の調査でトップのPrototype.jsの次につけるほどの人気を得ているが、実はPrototype.jsと同様、Webアプリケーション・フレームワークRuby on Railsのプロジェクトで開発されているプロダクトであり、同フレームワークに同梱されているため、Ruby on Rails経由で使用されるケースも多い。

ダウンロード

まずは、同フレームワークを利用するための準備をしよう。

Script.aculo.usのトップページからは、scriptaculous-js-xxxxx.zip(xxxxxはバージョン番号)、同.tar.gz、同.tar.bz2の3つの形式のファイルがアップされているので、開発環境で解凍可能なものをダウンロードしていただきたい。

解凍によって生成されたディレクトリ下のsrcディレクトリにscriptaculous.jsをはじめ8つのファイルがある。また、同じ階層のlibディレクトリにはprototype.jsもある。Webページで利用する際は、あらかじめ両者をふくめた*.jsファイルをすべてWebページ用のディレクトリにコピーしておかなければならない。

HTML文書では、以下のようにファイル名を記述しておく。

<script type="text/javascript" src="《ディレクトリ》/prototype.js"></script>
<script type="text/javascript" src="《ディレクトリ》/scriptaculous.js"></script>

この状態でscriptaculous.js以外のファイルも後からすべて自動的にロードされるが、必要なファイルのみをロードするには、src属性の値で"《ディレクトリ》/scriptaculous.js?load=dragdrop,controls"のように、loadオプションで.jsより前の部分のファイル名をカンマ区切りで記述する。

基本的な演出効果(Core Effects)

ここからはCore Effectsに含まれる基本的な演出効果を紹介しよう。オプションなど詳細はWikiサイトで確認していただきたい。なお、特別な場合を除き、省略可能な記述は[~]で表す。

Effect.Highlight( IDもしくはDOMオブジェクト, { オプション } );
または $( IDもしくはDOMオブジェクト ).highlight( { オプション } );

実行後に、指定された要素の背景色を開始色から終了色まで(デフォルトでは1秒間かけて)変化させる

リスト1: 実行開始から<div>の背景色を2秒間かけて(duration : core effectsの共通オプション)変化させる例

new Effect.Highlight( 'demo', { startcolor : '#ffff33', endcolor : '#ffffff',
                                duration : 2 } );
または
$( 'demo' ).highlight( { startcolor : '#ffff33', endcolor : '#ffffff',
                         duration : 2 } );

※ 操作対象 : <div id="demo">背景色が変化する</div>

図1: 実行前

図2: 実行開始

図3: だんだん色が薄くなり、やがて白くなる

Effect.Morph( IDもしくはDOMオブジェクト, { style : 'スタイルシート' [, オプション] } );
または $( IDもしくはDOMオブジェクト ).morph( 'スタイルシート' [, { オプション} ] );

実行前の状態からスタイルシートの状態に(デフォルトでは1秒間かけて)変化させる

リスト2: 実行開始から0.5秒遅れて(delay : core effectsの共通オプション)、<div>の表示領域を150px四方に、フォントを25ptにする例

new Effect.Morph( 'demo', { style : 'width : 150px;  height : 150px;  font-size : 25pt;', delay : 0.5 } );
    または
$( 'demo' ).morph( 'width : 150px;  height : 150px;  font-size : 25pt;',
                   { delay : 0.5 } );

※ 操作対象 : <div id="demo">大きさが変化する</div>

図4: 実行前

図5: 拡大された

Effect.Move( IDもしくはDOMオブジェクト,
{ x : X軸の移動距離, y : Y軸の移動距離
[, mode : 'relative もしくは absolute' ] [, オプション ] } );

xとyの距離だけ移動させる。relative(デフォルト)では何度も同じ距離だけ動くが、absoluteは最初の1回しか動かない。

リスト3: 1回だけ右に100px、下に50px移動する例

new Effect.Move( 'demo', { x : 100, y : 50, mode : 'absolute' } );

※ 操作対象 : <div id="demo">位置が動く</div>

図6: 実行前

図7: スーッと動く

Effect.Opacity( IDもしくはDOMオブジェクト,
{ from : 開始時点の透明度, to : 終了時点の透明度
[ , duration : 変化させる時間 ] [, オプション ] } );

透明度をfromからtoまで変化させる。デフォルトではfromが開始時点もしくは0%(まったく見えない)、toは100%に設定されるが、最低でもfromかtoの一方は指定されていなければならない。

リスト4: 2秒間かけて20%まで透明にする例

new Effect.Opacity( 'demo', { from : 1, to : 0.2, duration : 2 } );

※ 操作対象 : <div id="demo">徐々に透明になる</div>

図8: 実行前

図9: 透明度20%の状態

Effect.Scale( IDもしくはDOMオブジェクト, 拡大/縮小率 [, { オプション } ] );

拡大/縮小率(もとの大きさを100とする)の分だけ拡大/縮小する。このとき指定されたテキストのフォントサイズも同じ比率で拡大/縮小する。オプションはドキュメント参照。

リスト5: 表示領域と文字の大きさを中心から広げて1.5倍にする

new Effect.Scale( 'demo', 150, { scaleFromCenter : true } );

※ 操作対象 : <div id="demo">大きさが変化する</div>

図10: 実行前

図11: 中心から拡大する

Effect.Parallel( Effectの配列, { オプション } );

上記を含む各種の演出効果を同時並行して実行する

リスト6: 2つの<div>に対する演出効果を同時に実行する([~]は配列)

new Effect.Parallel( [
    new Effect.Opacity( 'demo1', { from : 1, to : 0.2, sync : true } ),
    new Effect.Scale( 'demo2', 150, { sync : true } )
] );

※ 操作対象 : <div id="demo1">徐々に透明になる</div>
              <div id="demo2">大きさが変化する</div>

図12: 実行前

図13: どちらも同時に変化する

次回は、これらを組み合わせた複合的な動作をするものを紹介したい。