2014-10-16 157 views
0

這是我用於滑塊的腳本。在這個滑塊中,我有2個左右按鈕來訪問幻燈片。我已經使用jQuery和一些Javascript來做到這一點。我正在使用按鈕進行播放/暫停,但在第三次滑塊崩潰之後,它變得非常快。Javascript與jQuery滑塊。奇怪的循環

按鈕

<input type="button" class="pausa" value="PAUSE" /> 

腳本

$(document).ready(function(){ 

    var one = "label#arrow-"; 
    var x = 2; 
    var y = 0; 
    var two = ".arrows"; 
    function clickin() { 
     if(jQuery('.pausa').data('clicked')) { 
      jQuery('.pausa').click(function(){ 
       $(this).data('clicked', false); 
       $(this).val('PAUSE'); 
       return setTimeout(clickin, 4000); 
      }); 
     } 
     else { 
      while ((x != 7) && (y == 0)) { 
       $(one + x + two).trigger('click'); 
       x++; 
       if (x != 7) 
        return setTimeout(clickin, 4000); 
      } 
      if (x == 7) { 
       y = 1; 
       x = 5; 
      } 
      while ((x != 0) && (y == 1)) { 
       $(one + x + two).trigger('click'); 
       x--; 
       if (x != 7) 
        return setTimeout(clickin, 4000); 
      } 
      if (x == 0) { 
       y = 0; 
       x = 2; 
       return setTimeout(clickin, 4000);; 
      } 
     } 
    } 
    setTimeout(clickin, 4000); 
    jQuery('.pausa').click(function(){ 
     $(this).data('clicked', true); 
     $(this).val('PLAY'); 
     return clickin(); 
    }); 
}); 
+0

我製作了幾個滑塊...我想象一下,每次點擊時,setTimeouts都會堆疊在彼此之上,以至於它們最終會在另一個之後播放。 對於初學者,不要像這樣使用嵌套的setTimeouts,除非在運行另一個setTimeout之前先取消它。 我找到的更簡單的方法,我可以試着寫出來,就是使用一個變量來讓你知道滑塊是否正在移動或不移動,當你想停止時你可以切換......基本上clickin可以做的第一件事是檢查「isPlaying == true」,如果是,就返回。 – 2014-10-16 21:09:15

+0

是否有每個幻燈片都有一個按鈕而不僅僅是滑塊作爲一個整體的原因? – 2014-10-16 21:10:58

+0

不幸的是,我使用了一組6個按鈕的手動滑塊,因爲這個原因,我正在增加var x,點擊並滑動(我應該手動操作的操作) – Nilsen 2014-10-16 21:23:51

回答

0

我固定它:

您可以查看完整的代碼here

$(document).ready(function(){ 
var one = "label#arrow-"; 
var two = ".arrows"; 
var x = 2;  //Value of the button 
var point = 0; //Check if you are pressing for play or pause  
function clickin() { 
    if(point % 2) 
     $('.pausa').val('PLAY'); //Rotation Pause 
    else 
     $('.pausa').val('PAUSA'); //Rotation Play 
    if(!(point % 2))    //If it's in Play (Pause for button) 
    { 
     $(one + x + two).trigger('click'); 
     x++; 
     if(x == 7) 
      x = 1; 
     return setTimeout(clickin, 4000) 
    } 
    else return 1;     //If it's in Pause (Play for button) 
} 
setTimeout(clickin, 4000); 
jQuery('.pausa').click(function(){ //Waiting input click 
    point++; 
    return clickin() 
}); 
});