このページの本文へ

  • twitterでつぶやく
  • はてなブックマークに登録
  • del.icio.usに登録
  • livedoorクリップに登録
  • Buzzurlに登録
  • StumbleUponに登録
  • Google Bookmarksに登録
  • Facebookでシェア
  • Yahoo!ブックマークに登録
  • お気に入りに登録
  • 本文印刷

古籏一浩のJavaScriptラボ ― 第17回

Yahoo! UI Library 3版スライドショーの作り方

2009年10月27日 15時52分更新

文● 古籏一浩


もっと派手なアニメーションを付けたスライドショー

 サンプル01のスライドショーは画像がフェードしながら切り替わるだけです。十分といえば十分ですが、せっかくYUI 3を使っているので今度はもっと派手な動きを付けましょう。「前へ」ボタンをクリックすると画像を右側へ移動しながらフェードアウト、「次へ」ボタンなら画像を左側に移動しながらフェードアウトするようにします。

 先ほど作成したsetAnime()関数に少し手を加えて、画像を移動させる処理を追加します。まず、関数に渡される引数を1つ増やし、どのくらい移動させるかのオフセット値を指定できるようにします。「-150」なら現在のX座標から-150ピクセル移動させる、という意味です。

 画像の移動は、fromとtoで設定できました(関連記事)。画像を現在の表示位置から移動させるので、fromには最初の画像のXY座標を指定します。最初の画像の座標は、初期設定の際にposX,posYに入れてありますので、from : { xy:[ posX, posY ] },と記述すれば設定できます。toにはxyで移動先の座標値を設定します。posX+offsetとすれば、現在のX座標にオフセット値を加えたX座標まで画像が移動します。

 実際のスクリプトはサンプル02です。ボタンをクリックすると画像が左右どちらかに移動しながらフェードアウトしていきます。連続してボタンが押されれば、画像も連続して移動していきます。オフセット値にもっと大きな値を指定すると見た目には面白いかもしれません。

fig3-1fig3-2
fig3-3サンプル02の実行画面。ボタンをクリックすると現在表示されている画像が移動しながら消えていく

●サンプル02(スクリプト=YUI_slideshow.js)


YUI().use('anim', function(Y){
    Y.on('load', function(){
        var photoList = [];
        var counter = 0;
        var fadeTime = 1.0;   // フェード時間
        var firstPhoto = Y.one('.yui3-slideshow');
        var posX = firstPhoto.getX();
        var posY = firstPhoto.getY();
        Y.all('.yui3-slideshow').each(function(ele){
            ele.setX(posX);
            ele.setY(posY);
            photoList.push(ele);
        });
        // 最初の一枚目を表示する
        (new Y.Anim({
            node: photoList[0],
            duration : fadeTime,
            to   : { opacity : 1.0 }
        })).run();
        // 前へ、ボタンが押された時の処理
        Y.get('#YUI3_slideshow_prev').on('click', function(){
            if (counter > 0) setAnime(counter--, counter, 150);
        });
        // 次へ、ボタンが押された時の処理
        Y.get('#YUI3_slideshow_next').on('click', function(){
            if (counter < photoList.length-1) setAnime(counter++, counter, -150);
        });
        // フェードアニメーション処理
        function setAnime(pos1, pos2, offset){
            (new Y.Anim({
                node: photoList[pos1],
                duration : fadeTime,
                from   : { xy:[ posX, posY ] },
                to   : { opacity : 0.0, xy:[posX+offset, posY ] }
            })).run();
            (new Y.Anim({
                node: photoList[pos2],
                duration : fadeTime,
                from   : { xy:[ posX, posY ] },
                to   : { opacity : 1.0, xy:[posX, posY ] }
            })).run();
        }
    });
});


この連載の記事

ASCII.jp会員サービス 週刊Web Professional登録

Webディレクター江口明日香が行く

みんなが買ってる最新アイテムはコレだ!

VOCALOID3 スターターIA ARIA ON THE PLANETES

VOCALOID3 スターターIA ARIA ON THE PLANETES

ヤマハ

17,745円〜

24人が購入

Google上位表示 64の法則 (WEB PROFESSIONAL)

Google上位表示 64の法則 (WEB PROFESSIONAL)

アスキー・メディアワークス

2,499円〜

72人が購入

標準HTML5タグリファレンス (WEB PROFESSIONAL)

標準HTML5タグリファレンス (WEB PROFESSIONAL)

アスキー・メディアワークス

2,205円〜

59人が購入

Speck MacBook Air 13型 See Thru - Clear SPK-MBA13-SEE-CLR

Speck MacBook Air 13型 See Thru - Clear SPK-MBA13-SEE-CLR

スペックコンピュータ

4,262円〜

23人が購入

jQuery Mobile スマートフォンサイト デザイン入門 (WEB PROFESSIONAL)

jQuery Mobile スマートフォンサイト デザイン入門 (WEB PROFESSIONAL)

アスキー・メディアワークス

2,499円〜

40人が購入

メモリーカード 32GB (PCH-Z321J)

メモリーカード 32GB (PCH-Z321J)

ソニー・コンピュータエンタテインメント

7,772円〜

9人が購入

iPhone 4S/4 防指紋性・高光沢機能性フィルム PRO GUARD AF for iPhone 4S/4 / PGAF-IPH4

iPhone 4S/4 防指紋性・高光沢機能性フィルム PRO GUARD AF for iPhone 4S/4 / PGAF-IPH4

マイクロソリューション Micro Solution Inc.

61人が購入

Amazon.co.jp