SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

DeveloperZine(デベロッパージン)- エンジニアの意思決定を支える技術情報メディア ProductZine

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

Script.aculo.usで作成するビジュアルなWebページ

Script.aculo.usで実現できる、さまざまな視覚効果

Script.aculo.us入門 (2)

次々に効果を実行する

 同時に効果を実行するのでなく、順番に実行するにはどうすればよいのでしょうか。実は、これは簡単です。実行したい効果を順番に記述すれば良いのです。ただし、それだけだと、効果が終わるのを待たずに次々と実行していくため、実際にはほとんど同時に実行されることになってしまいます。

 では、どうすればいいか。実は、「queue」というオプションを指定することで、順に実行させることができます。これは、その効果の実行順を配列の前後に追加していくためのものです。例えば、queue:'front'とすれば先頭に追加され、queue:'end'では末尾に追加されます。

<a href="#" onclick="new Effect.Move($('div_1'),{x:300, y:0, mode:'relative',queue:'end'});
    new Effect.Move($('div_2'),{x:300, y:0, mode:'relative',queue:'end'});
    new Effect.Move($('div_3'),{x:300, y:0, mode:'relative',queue:'end'});
    return false;">Parallel Effect!</a>
<br />
<div id="div_1" style="background: #FFAAAA; width:100px; height:100px;">First</div>
<div id="div_2" style="background: #AAFFAA; width:100px; height:100px;">Second</div>
<div id="div_3" style="background: #AAAAFF; width:100px; height:100px;">Third
</div>
クリックすると3つの四角形が順番に右へと移動していく。
クリックすると3つの四角形が順番に右へと移動していく。

 これは、3つのエフェクトを順にqueue:'end'で追加したものです。こうすると、それぞれのエフェクトが順番に実行されていきます。もちろん、frontを指定しても可能です。この場合は、最後に組み込んだものから順に実行されることになります。

複数のParallelを順次実行する

 このqueueによる指定は、個々の効果を実行するのには便利なのですが、では同時に複数の効果を実行するParallelを使う場合には注意が必要です。Parallelは、その中に複数の効果をもっていますので、それらは同時に実行し、かつParallelどうしは順次実行する、というようにしなければいけません。

<a href="#" onclick="new Effect.Parallel([
        new Effect.Opacity('div_3',{from: 1.0, to: 0}),
        new Effect.Move($('div_3'),{x:300, y:0, mode:'relative'})],{queue:'front'});
    new Effect.Parallel([
        new Effect.Opacity('div_2',{from: 1.0, to: 0}),
        new Effect.Move($('div_2'),{x:300, y:0, mode:'relative'})],{queue:'front'});
    new Effect.Parallel([
        new Effect.Opacity('div_1',{from: 1.0, to: 0}),
        new Effect.Move($('div_1'),{x:300, y:0, mode:'relative'})],{queue:'front'});
    return false;">Parallel Effect!</a>
<br />
<div id="div_1" style="background: #FFAAAA; width:100px; height:100px;">First</div>
<div id="div_2" style="background: #AAFFAA; width:100px; height:100px;">Second</div>
<div id="div_3" style="background: #AAAAFF; width:100px; height:100px;">Third</div>
クリックすると、それぞれの四角形が順番に右へ移動しながら消えていく。
クリックすると、それぞれの四角形が順番に右へ移動しながら消えていく。

 これは、複数のParallel指定を順に実行していくサンプルです。Parallelを次々に配列の先頭に追加していくため、すべてが追加されたところで先頭から順に実行がされていきます。不思議なことに、queue:'end'を指定した場合には、なぜかすべてほぼ同時に実行されてしまいます。これは、現在のScript.aculo.usの問題なのか、そういう仕様なのか、そもそもParallelでは使うべきでないのか……。とりあえず、現状では「Parallelをqueueで順次実行させる場合には問題がある」ということだけは言えそうです。

独自の効果を定義する

 ここで紹介した効果を組み合わせることで、大抵のことはできるでしょうが、しかし完璧というわけではありません。Script.aculo.usの効果は、基本的に「スタイルシートの値を変化させる」というものであり、それ以外のものを変化させることはできません。そこで、独自に値を変化させるものを簡単に定義する方法について触れておきましょう。それは「Tween」というものを利用します。これは、次のような形で実行します。

new  Effect.Tween( タグID , 開始値 , 終了値 , 属性または関数 );
new  Effect.Tween( タグID , 開始値 , 終了値 , オプション設定 , 属性または関数 );

 このTweenは、特定のタグの属性を開始値から終了値まで変化させていくというものです。非常に面白いのは、属性だけでなく関数定義を指定することもできるという点です。この関数は引数を1つもっており、変化する値が渡されます。実際に簡単な例を挙げておきましょう。

<a href="#" onclick="new Effect.Tween('div_1',0,22,{duration: 5},
    function(n){
        var str = 'Welcome To JavaScript.';
        this.innerHTML = str.substring(0,Math.round(n));
    });
    return false;">
    <div id="div_1" style="font-size: 18pt; background: #FFCCCC; width:300px; height:40px;">Click!</div>
</a>
クリックすると、「Welcome To JavaScript.」というテキストがゆっくり書き出される。
クリックすると、「Welcome To JavaScript.」というテキストがゆっくり書き出される。

 これは、クリックすると「Welcome To JavaScript.」というテキストがゆっくりとタグに書き出されていくサンプルです。ここでは、第5引数に関数を指定し、その中でinnerHTMLにテキストを設定しています。操作する対象オブジェクトは、thisで指定できます。このように関数で定義することで、大抵の操作は行えるようになるでしょう。

まとめ

 今回は、Script.aculo.usの主な視覚効果の使い方について紹介しました。複数の効果を組み合わせたり、独自の処理を用意するようになるとそれなりにJavaScriptを学ばなければいけなくなりますが、基本的な効果をいくつか使う程度ならそれほど知識がなくとも十分利用できるでしょう。それだけでも、サイトのインターフェイスはぐっとクールになるはずです。

 JavaScriptそのものは、本格的に使いこなそうとすると非常に奥の深いものですが、こうしたライブラリを使うことで、ビギナーでも簡単に導入できるようになります。プログラミング・ビギナーこそ、こうしたAjaxライブラリを使ってみてほしいと思うのですが、いかがでしょうか。

この記事は参考になりましたか?

連載通知を行うには会員登録(無料)が必要です。
既に会員の方はを行ってください。
Script.aculo.usで作成するビジュアルなWebページ連載記事一覧
この記事の著者

掌田 津耶乃(ショウダ ツヤノ)

三文ライター&三流プログラマ。主にビギナーに向けたプログラミング関連の執筆を中心に活動している。※現在、入門ドキュメントサイト「libro」、カード型学習サイト「CARD.tuyano.com」を公開...

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

CodeZine(コードジン)
https://codezine.jp/article/detail/3601 2009/03/18 14:00

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー