我在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;}
    });

最佳答案

您可能可以执行以下操作:

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更合适的用例。

关于jquery - 暂停.each淡入淡出循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17681256/

10-11 22:19
查看更多