Jquery函数创建一个异常的暂停

时间:2016-04-16 00:06:56

标签: javascript jquery

编辑:创建了一个显示问题https://jsfiddle.net/MichaelCaley/wcoba1jy/

的小提琴

下面的代码在每个淡入淡出之间创建一个7秒的暂停,直到我们到达代码重新运行的末尾。由于某种原因,这种延迟变为14/15秒。

我已经做了很多搜索但是想出了特朗普,所以任何帮助都会受到赞赏。

    var imgshow = function(){
    $(".img1").delay(7000).fadeOut(1500, function(){
        $(".img2").delay(7000).fadeOut(1500, function(){
            $(".img1").delay(7000).fadeIn(1500, function(){
                $(".img2").delay(7000).fadeIn(1500, function(){
                    imgshow();
                });
            });
        });
    });
}
imgshow();

1 个答案:

答案 0 :(得分:0)

它实际上是按编码运行的(但可能不像你想象的那样:-))。发生的事情是第二个fadeIn(视觉上)没有效果,因为img2在img1(完全不透明)下,导致img1保持两倍的长度。

希望以下内容清楚 - 1表示完全不透明,0表示完全透明

  • img3(1)img1(1)下的img1(1)=> img1显示
  • img3(1)img1(1)下的img1(0)=> img2显示
  • img3(1)在img1(0)下的img1(0)=> img3显示
  • img3(1)在img1(1)下的img1(1)=> img1显示
  • img3(1)img1(1)下的img1(1)=> img1显示(当你可能想要img2时) ...

如果你换掉最后的2 fadeIn,你会得到每个间隔(https://jsfiddle.net/xx303tdc/)改变颜色的东西,但序列将是img1,img2,img3,img2,img1 .. 。否则你可以在img1 fadeIn之后将img2设置为完全可见,然后重新启动循环。

在任何情况下,因为你正在进行递归调用,你最终会耗尽堆栈空间(由于延迟而非常缓慢),所以重构使用CSS转换可能是个好主意。