Поставяне на пауза на всеки цикъл на затихване

Имам .each цикъл в jquery, който избледнява изображенията, за да ги разкрие във фонов режим. На всяко следващо изображение се задава увеличено забавяне. Възможно ли е да поставите на пауза такъв цикъл чрез щракване?

 <?php
    $ttlart = count($rows);
    echo "var ttlart = " . $ttlart . ";";
    foreach ($rows as $ro) {
        $fadedur = $ro['fadedur'];
            echo "fadedur = " . $fadedur . ";";
            $staysonscreen = $ro['staysonscreen'];
            echo "staysonscreen= " . $staysonscreen . ";";
        $order = $ro['order'];
            echo "order= " . $order. ";";
            echo "$(\"#" . $order . "\").css(\"font-size\",fadedur);";
            echo "$(\"#" . $order . "\").css(\"text-indent\",staysonscreen);";     
            //echo "alert(\"here\");";
    }
    ?>

    var artdelay = 0;
    var playstop = 0;
    var ctr = 1;    

    $($("#images img").get().reverse()).each(function(){
       fadedur = parseInt($(this).css("font-size"));
       staysonscreen = parseInt($(this).css("text-indent"));
       artdelay = artdelay+staysonscreen;

       if (ctr < ttlart){
       $(this).delay(artdelay).fadeOut(fadedur); 
        artdelay = artdelay+fadedur;

      $(".jp-controls").click(function(){

       if(playstop == 0){
       $("#images img").stop(true);
       playstop = 1;
       }else{ //alert(artdelay);
       $("#images img").delay(artdelay).fadeOut(fadedur);
       playstop = 0;}

       });

       ctr=ctr+1;}
    });

person user2534991    schedule 16.07.2013    source източник


Отговори (2)


Може да успеете да направите нещо подобно:

http://jsfiddle.net/EJ6Yg/

$(document).ready(function () {
    var delay = 200;
    $('div').each(function () {
        $(this).delay(delay).fadeOut('slow');
        delay *= 1.5;
    });
});

Заменете div с някакъв селектор за вашите изображения, разбира се.

След като прочетох вашата актуализация, мисля, че виждам проблема - използвате delay(), но искате да можете да поставите на пауза или да спрете анимациите.

jQuery API споменава това конкретно:

Методът .delay() е най-добър за забавяне между поставените на опашка jQuery ефекти. Тъй като е ограничен – например не предлага начин за отмяна на забавянето – .delay() не е заместител на естествената функция setTimeout на JavaScript, която може да е по-подходяща за определени случаи на употреба.

Вярвам, че това е случай на употреба, при който setTimeout е по-подходящ.

person Jason P    schedule 16.07.2013
comment
Благодаря ви много за отговора, но забравих да уточня, че трябва паузата да се инициира при щракване. Това удвоява трудността. - person user2534991; 16.07.2013
comment
Добре, благодаря ви за помощта. Виждаш ли какво се опитвам да направя? - person user2534991; 16.07.2013
comment
По принцип искам да поставя на пауза моето слайдшоу чрез щракване. Мислех, че ще е лесно. - person user2534991; 16.07.2013
comment
Благодаря много. Ще го пробвам и ще ви кажа как върви! - person user2534991; 16.07.2013
comment
Благодаря за вашата помощ. Разбрах го с помощта на setTimeout. - person user2534991; 19.07.2013

Не съм сигурен дали разбирам правилно въпроса ви, но опитайте нещо подобно.

$.each($).wait(1000, function(index) {
    // Sets a 1 second delay between iterations
});
person Willem Ellis    schedule 16.07.2013
comment
Извинявам се, че не уточних, че трябва да стане с щракване. Благодаря и на двама ви за помощта. - person user2534991; 16.07.2013