暂停.each淡入淡出循环

时间:2013-07-16 15:51:11

标签: jquery delay fade each

我在jquery中有一个.each循环,淡出图像以在后台显示它们。为每个后续图像分配增加的延迟。是否可以通过点击暂停这样的循环?

 <?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;}
    });

2 个答案:

答案 0 :(得分:0)

不确定我是否正确理解你的问题,但尝试这样的事情。

$.each($).wait(1000, function(index) {
    // Sets a 1 second delay between iterations
});

答案 1 :(得分:0)

你可能会做这样的事情:

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()不是JavaScript本机的替代品   setTimeout函数,可能更适合某些用途   例。

我认为这是setTimeout更合适的用例。