2012-04-21 7 views
2

私は、Jqueryの初心者で、これから始めることになります thisに基づいて、クリック可能なサイクルスライドショーを作成しようとしました。 これまでのところとても良いです。コードは機能します(下記参照)。 私の質問:次回/前回のリンクを使ったシンプルなスライドショー

  1. 簡単なコードの記述方法はありませんか?私は前と次のコードを同じように繰り返しています。

  2. 次の/ prevリンクをクリックするとアニメーションが開始されます。アニメーション中にもう一度クリックすると、イメージがちらつくかエラーが発生することがあります。 アニメーションを強制的に終了してから、クリックに反応します。

Javascriptを:

$(function() { 

    $('#prev').click(function() { 
     var $active = $('#slideshow IMG.active'); 
     var $prev = $active.prev(); 
     $active.addClass('last-active'); 

    if($active.is(":first-child")){$prev = $("IMG:last-child");} 
     $prev.css({opacity: 0.0}) 
      .addClass('active') 
      .animate({opacity: 1.0}, 1000, function() { 
       $active.removeClass('active last-active'); 
      }); 

    }); 


    $('#next').click(function() { 
     var $active = $('#slideshow IMG.active'); 
     var $next = $active.next(); 
     $active.addClass('last-active'); 

    if($active.is(":last-child")){$next = $("IMG:first-child");} 
     $next.css({opacity: 0.0}) 
      .addClass('active') 
      .animate({opacity: 1.0}, 1000, function() { 
       $active.removeClass('active last-active'); 
      }); 

    }); 

    }); 

CSS:

#slideshow {position:relative; height:350px; opacity:1.0;} 
    #slideshow IMG {position:absolute; top:0; left:0; z-index:8; opacity:0.0;} 
    #slideshow IMG.active {z-index:10; opacity:1.0;} 
    #slideshow IMG.last-active {z-index:9;} 
    #next {color:#0000ff; cursor:pointer;} 
    #prev {color:#0000ff; cursor:pointer;} 

HTML:

<div id="slideshow"> 
     <img src="image1.jpg" class="active" /> 
     <img src="image2.jpg" /> 
     <img src="image3.jpg" /> 
     <img src="image4.jpg" /> 
    </div> 
    <div id="next">NEXT</div> 
    <div id="prev">PREV</div> 

答えて

0

http://jsfiddle.net/kPD4n/

1)「NEXT」ボタンと「PREV」ボタンに同じクラスを追加し、クリックしたことを確認します。
2).stop(0,1)を追加してアニメーションの最後にジャンプします。

まだ少しばかりだが...

+0

非常にクールです、ありがとう! - console.logはテストするだけのものだと思いますよね? - 私はhttp://api.jquery.com/stop/を読んでいますが、(0,1)がstop()の略であるとは分かりません – Michael

+0

最初に0はアニメーションキューがクリアされていないことを意味しますアニメーションを10回トリガすると、アニメーションは10回(全長)実行されます。したがって、次のボタンを10回高速にクリックすると、すべてのアニメーションが終了するまで待つ必要があります。 2番目の '1'は、再生中のCurentアニメーションを停止することです(Curentアニメーションを実際に終了します)。したがって、次のボタンを10回押すと、最初の9回のアニメーションが即座に実行され、最後のアニメーションのみが表示されます。 .stop(0,1)はこの繰り返しアニメーションの問題を解決する通常の方法です。 – Cristy

+0

キューがクリアされていなくてもstop(0,1)を指定すると、アニメーションの再生中にトリガーボタンをクリックするとアニメーションが終了し、これを実行するだけなのでアニメーションはキューに追加されません。 – Cristy

1
私はいくつかのサイクルのものを構築する必要性accrossに来

まあ毎回、私が利用jQuery Cycle PlugIn。これは最適化の質問に対する答えではないかもしれませんが、誰もがCycleプラグインを見ていたはずです。

here on the demo pageを見ると、次の/前のボタンも非常に簡単に使用できます。ちょうどのように

$('#slideshow').cycle({ 
    fx:  'fade', 
    speed: 'fast', 
    timeout: 0, 
    next: '#next', 
    prev: '#prev' 
}); 

あなたのHTMLコードはそのままになります。あなたが行くあり

+0

ありがとう!私はサイクルプラグインを知っています。しかし、Jqueryについて学ぶために、私はそれを自分で構築したかったのです。そして、私はちょうど縦と横にcylceプラグインを集中させることができませんでした。プラグインコードには何かがあって、そのことが難しくなっているに違いありません。 – Michael

関連する問題