このページの本文へ

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

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

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

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

文● 古籏一浩


ボタンがクリック時のイベント処理を追加する

 続いて、ナビゲーションボタンがクリックされた時の処理を作成します。HTMLを準備する際、ボタンには以下のID名を割り当てました。


【ID名の割り当て】

  • 前へ:YUI3_slideshow_prev
  • 次へ:YUI3_slideshow_next

 それぞれのボタンに対してイベントを設定していきます。ID名の場合はone()/all()ではなく、get()メソッドを使って要素を取得します。ボタンがクリックされるとclickイベントが発生するので、on()を使って以下のように定義します。


【イベントの定義】


// 次へ、ボタンが押された時の処理
Y.get('#YUI3_slideshow_next').on('click', function(){
    if (counter < photoList.length-1) setAnime(counter++, counter);
});


 「次へ」ボタンがクリックされると、最後の画像でなければsetAnime()関数を呼び出します。setAnime()関数は、第1引数に次に表示する画像の番号、第2引数に現在表示している画像の番号を指定します。

 setAnime()関数では表示中の画像をフェードアウトさせ、同時に、次に表示する画像をフェードインさせます。フェードアニメーションの処理はこれまでと同じです。


【フェード処理】


function setAnime(pos1, pos2){
    (new Y.Anim({
        node: photoList[pos1],
        duration : fadeTime,
        to   : { opacity : 0.0 }
    })).run();
    (new Y.Anim({
        node: photoList[pos2],
        duration : fadeTime,
        to   : { opacity : 1.0 }
    })).run();
}


 ここまでをまとめたものがサンプル01です。ボタンをクリックすると画像がフェードしながら切り替わります。

fig2-1fig2-2
fig2-3サンプル01の実行画面。次へボタンをクリックすると画像がフェードしながら切り替わる

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


YUI().use('anim', function(Y){
    Y.on('load', function(){
        var photoList = [];
        var counter = 0;
        var fadeTime = 2.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);
        });
        // 次へ、ボタンが押された時の処理
        Y.get('#YUI3_slideshow_next').on('click', function(){
            if (counter < photoList.length-1) setAnime(counter++, counter);
        });
        // フェードアニメーション処理
        function setAnime(pos1, pos2){
            (new Y.Anim({
                node: photoList[pos1],
                duration : fadeTime,
                to   : { opacity : 0.0 }
            })).run();
            (new Y.Anim({
                node: photoList[pos2],
                duration : fadeTime,
                to   : { opacity : 1.0 }
            })).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