2016-11-30 16 views
0

私の目的は、最初の3枚のスライドを表示し、次に3枚のスライドを表示することです。その後、最初の3枚のスライドが再び表示されます。ルーパー。 どうすればいいですか? HTMLのループの関数setInterval()を1つずつ呼び出す

サンプル:

<div class="contents"> 
<div class="transit"> 
    <div class="content ctransit_" id="ct_1" > 
     <div class="main_transit" >  <h1>1.1slide</h1> </div> 
    </div> 
    <div class="content ctransit_" id="ct_2" > 
     <div class="main_transit"> <h1>1.2slide</h1> </div> 
    </div> 
    <div class="content ctransit_" id="ct_3" > 
     <div class="main_transit"> <h1>1.1slide</h1> 
    </div> 
</div> 
<div class="arrived"> 
    <div class="content carrived_ " id="ct_1" > 
     <div class="main_arrived"> <h1>2.1slide</h1> </div> 
    </div> 
    <div class="content carrived_" id="ct_2" > 
     <div class="main_arrived"> <h1>2.2slide</h1> </div> 
    </div> 
    <div class="content carrived_" id="ct_3"> 

     <div class="main_arrived"> <h1>2.3slide</h1></div> 
    </div> 
</div> 
</div> 

JS:

var c=0; 
var k=0; 

function setIntervalX(interationFunction, delay, repetitions, callbackFunction) { 
var x = 0; 
var intervalID = window.setInterval(function() { 

    interationFunction(); 

    if (++x === repetitions) { 
     callbackFunction(); 
     window.clearInterval(intervalID); 
    } 
}, delay);} 


$(".carrived_").hide(); 
    $(".ctransit_").not(":first").hide(); 

    setIntervalX(
    function() { 
    $(".ctransit_:gt(0)").hide(); 
     $('.ctransit_:first') 
       .slideUp(1000) 
       .next().addClass(inClass) 
       .slideDown(1500) 
       .end().addClass(outClass) 
       .appendTo('.contents .transit '); 

     console.log(c++) // this executed every time the interval triggers 
    },3000, 5, 
    function() {  
     $(".transit").hide(); 
     $(".ctransit_").hide(); 

     $(".carrived_:first").show().addClass(inClass) 
      $(".carrived_").not(":first").hide(); 


      var x = 0; 

     var intervalID = window.setInterval(function() { 

     $(".carrived_:gt(0)").hide(); 
     $('.carrived_:first') 
     .slideUp(1000) 
     .next().addClass(inClass) 
     .slideDown(1500) 
     .end().addClass(outClass) 
     .appendTo('.contents .arrived '); 
         if (++x === 5) { 
          window.clearInterval(intervalID); 
         } 
     console.log(x) 
     }, 3000); 
// this will be executed after the interval triggered 5 times 
// so after round about 5 seconds after setIntervalX was started 
} 

https://jsfiddle.net/kqLkLwrk/4/

ここ

は私が既に持っているが、私はすべてを "再起動" する必要があるとき、私は動けなくなるコードです

+0

これは、過度に複雑そうです。 'setInterval'を使って、どのスライドが表示されているのかを知る'ハンドラー 'コールを1つ(グローバルvar、またはattr、またはプラグインローカルvarを介して基本レベルで) –

答えて

0

私のお気に入りは、ループを処理できる関数を作成する、put params ne配列に編集し、インデックスをループします。 ここに私達は行く:

function showSlide(arr,index){ 
    if(arr.length==0) return; 
    if(index>=arr.length) index=0; 
    var cur = arr[index]; 
    var target = cur[0]; 
    var container = cur[1]; 
    var delay = cur[2]; 
    var rep = cur[3]; 

    $(".ctransit_").hide(); 
    $(".carrived_").hide(); 
    $(target).first().show(); 
    setIntervalX(function() { 
     $(target).not(":first").hide(); 
     $(target).first().show() 
      .slideUp(1000) 
      .next().addClass(inClass) 
      .slideDown(1500) 
      .end().addClass(outClass) 
      .appendTo(container); 

     console.log(c++) 
     // this executed every time the interval triggers 
    },delay,rep, function(){ 
     index++; 
     showSlide(arr,index); 
    }); 
} 

showSlide([ 
    [".ctransit_",'.contents .transit',3000,6], 
    [".carrived_",'.contents .arrived',3000,5] 
],0); 

https://jsfiddle.net/kqLkLwrk/4/

+0

ありがとうございます:) –

関連する問題