0

我为旋转 div 创建了简单的函数,为此我使用 setTimeOut 并且该函数告诉脚本重复的时间相同并转到下一个,在我的情况下的问题是我在每个转换中使用效果并且需要回调函数发生在效果结束时

我的功能:

<script>
function repiter(id)
{

$(".sd_"+id).show(2000).hide(1000);

var npics=4;
var ret=(id+1);


if (ret>=npics)
{
var ret=0;  
}

setTimeout(function(){repiter(ret);},2000)  

}
</script>


<div class="sd_0" style="display:none;">Tester 1</div>
<div class="sd_1" style="display:none;">Tester 2</div>
<div class="sd_2" style="display:none;">Tester 3</div>
<div class="sd_3" style="display:none;">Tester 4</div>

<script>
repiter(0);
</script>

正如您在此处看到的,该函数旋转 4 个 div 和内容,当走到尽头时,第一次和所有时间返回,但在每种情况下,每个 div 的效果 = 4 或 5 秒,并且在动画的中间div setTimeout 在其他时间调用函数并在每种情况下破坏效果,通过这个我的问题,在 jquery 中存在一些方法 setTimeout 仅在效果完成时运行,并且在此调用其他时间之后运行该函数?

谢谢

4

2 回答 2

0

尝试

<script> 
    function repiter(id) {

    $(".sd_"+id).show(2000, function(){
    $(".sd_"+id).hide(1000, function(){

    var npics=4; var ret=(id+1);

    if(ret>=npics) { var ret=0; }

setTimeout(function(){repiter(ret);},2000)
})
})


} </script>
于 2013-10-20T14:40:01.643 回答
0

您可以使用.promise()

$(".sd_"+id).show(2000).hide(1000).promise().done(function() {
    // now the animations are done
});
于 2013-10-20T14:36:30.017 回答