このページの本文へ

前へ 1 2 3 4 5 6 次へ

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

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

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

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

文● 古籏一浩


スライドショーに自動再生機能を追加する

 スライドショーはサンプル02で一応完成ですが、最後におまけとして自動再生機能を追加してみましょう。といっても単純に画像をアニメーションで切り替えていけばよいのですが、ここではYUI 3のカスタムイベントを使ってみます。カスタムイベントは、ブラウザーなどで定義されているclickやmouseoverのイベントとは別に、制作者が独自のイベントを定義できる機能です。カスタムイベントの定義は簡単で、「名前:イベント名」とするだけです。ここでは「slide:click」としました。

 カスタムイベントの処理も通常のイベントと同様にon()を使って定義します。カスタムイベント名を指定する以外はまったく同じです。slide:clickイベントが発生した場合は次のスライドを表示するように、setAnime()関数を呼び出します。「次へ」ボタンの場合は、スライドショーの最後まで表示されたら何も起きませんでしたが、自動再生の場合は最初の画像に戻って繰り返し表示するようにします。


【カスタムイベント定義】


Y.get('#YUI3_slideshow_next').on('slide:click', function(){
    if (counter < photoList.length-1) {
        setAnime(counter++, counter, -150);
    }else{
        setAnime(photoList.length-1, 0, -150);
        counter = 0;
    }
});


 カスタムイベントは、fire()メソッドを使って任意のタイミングで発生できます。発生させたいカスタムイベント名をfire()の最初の引数に文字列で指定します。あとは、setTimeout()を使って一定時間後にカスタムイベントを発生させれば、自動再生機能のでき上がりです。


【自動再生処理】


function autoPlay(){
    Y.get('#YUI3_slideshow_next').fire('slide:click');
    setTimeout(autoPlay, 3000);
}
autoPlay();


YUI 3
サンプル03の実行画面。スライドショーが繰り返し実行される

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


var counter = 0;
YUI().use('anim', function(Y){
    Y.on('load', function(){
        var photoList = [];
        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();
        }
        // カスタムイベント定義
        Y.get('#YUI3_slideshow_next').on('slide:click', function(){
            if (counter < photoList.length-1) {
                setAnime(counter++, counter, -150);
            }else{
                setAnime(photoList.length-1, 0, -150);
                counter = 0;
            }
        });
        // 自動再生処理
        function autoPlay(){
            Y.get('#YUI3_slideshow_next').fire('slide:click');
            setTimeout(autoPlay, 3000);
        }
        autoPlay();
    });
});


 3回に渡って紹介してきたYUIはいかがだったでしょうか。YUI 3はYUI 2.xと比べてまだまだ機能不足なのは仕方ありませんが、いずれ多くのウィジェットや機能、各種インターフェースが追加されていくはずです。今後に期待しつつ、今のうちから少しずつ触ってみてはどうでしょうか。

前へ 1 2 3 4 5 6 次へ

カテゴリートップへ

この連載の記事

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円〜

71人が購入

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

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

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

2,205円〜

60人が購入

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円〜

39人が購入

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

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

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

7,772円〜

9人が購入

Windows 7 Home Premium 通常版 Service Pack 1 適用済み

Windows 7 Home Premium 通常版 Service Pack 1 適用済み

マイクロソフト

20,271円〜

4人が購入

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.

59人が購入

Amazon.co.jp