2013-03-14 5 views
4
$('.ip_button').click(function(){ 
    var buttonValue, slideTimes; 
    buttonValue = $(this).html(); 
    slideTimes = parseInt(buttonValue) - 1; 
    for (var i = 0 ; i < slideTimes; i++) { 
      slider.gallery_next(); 
     }    
}); 

Я пытаюсь скопировать несколько изображений на слайдер, используя функцию, которая многократно определяет значение кнопки -1 и работает слайд. К сожалению, функция делает это только один раз, независимо от того, какое значение имеет кнопка. В настоящее время значение в кнопке:Iterate function x times by for loop

<button class="ip_button">5</button> 

Функция для gallery_next(); инкапсулируются и выглядит следующим образом:

this.gallery_next = function() { 
    if (galleryRotating) { return; } 
    galleryRotating = true; 
    var elem = $(galleryId + " > li").first(); 
    $(galleryId).append(elem.clone()); 
    $(galleryId).animate({"left" : -imgWidth}, 650, function() { 
     elem.remove(); 
     galleryRotating = false; 
     $(galleryId).css({"left" : 0}); 
    }); 

ответ

3

animate не закончит к тому времени for цикла снова вызывает функцию, так galleryRotation все равно будет верно, а функции не будут делать ничего. Вам нужен другой подход: либо установите таймер для вызова вашей функции, скажем, 700 мс или (что лучше) снова вызовите вращение в обратном вызове, который вы переходите на animate.

+0

Пожалуйста, проверьте следующее: http://jsfiddle.net/inser/LwhhD/3/ – inser

+0

Это на самом деле помещается в очередь: http://api.jquery.com/animate/ В своем вопросе вы сделали проверьте, активен ли эффект анимации, поэтому анимация не была помещена в очередь. В примере jsfiddle вы не проверяете его, поэтому анимация поставлена ​​в очередь. – Aneri