JQuery随着循环和延迟而淡出

时间:2009-08-19 17:46:04

标签: jquery loops fade

我有2个Divs堆叠在一起。

我需要一个非常简单的功能:

a)等待3秒然后 b)FadeOut顶部Div显示第二个Div c)再等3秒钟 d)再次淡入顶部Div e)再次回来

有人可以提供任何建议吗?

非常感谢

7 个答案:

答案 0 :(得分:10)

这是一次尝试。

function foo() {
    jQuery("#mydiv").animate({opacity: 1.0}, {duration: 3000})
        .animate({opacity: 0}, {duration: 3000})
        .animate({opacity: 0}, {duration: 3000})
        .animate({opacity: 1.0}, {duration: 3000, complete: foo})
}

注意:要暂停,只需在具有相同目标值的属性上调用动画即可。最后一个动画调用与回调相同的功能。

PS:是否会导致堆栈溢出?

答案 1 :(得分:2)

如果两个div的id为“id1”和“id2”,而id2是上一个,则代码如下:

function fadeIn() {
  $("id2").animate({opacity:0},500);
  setTimeout(fadeOut,3500);
}

function fadeOut() {
  $("id2").animate({opacity:1},500);
  setTimeout(fadeIn,3500);
}

function startAnim() {
  setTimeout(fadeIn,3000);
}

startAnim()启动动画循环,您应该调用@ start。然后淡出&保持动画id2并为彼此设置超时。延迟为3500,因为您需要3秒的延迟(即3000毫秒),并且需要500秒才能完成上一个动画。这可以使用animate上的回调来完成,但这更麻烦。

答案 2 :(得分:2)

这就是你要找的东西(我想)。它使用了一个无序列表,但您可以将其切换为div,或者只是将div放在列表项中,就像我在下面所做的那样。

这是jQuery ......

$(document).ready(function() {

     var j = 0;
     var delay = 2000; //millisecond delay between cycles
     function cycleThru(){
             var jmax = $("ul#cyclelist li").length -1;
             $("ul#cyclelist li:eq(" + j + ")")
                     .animate({"opacity" : "1"} ,400)
                     .animate({"opacity" : "1"}, delay)
                     .animate({"opacity" : "0"}, 400, function(){
                             (j == jmax) ? j=0 : j++;
                             cycleThru();
                     });
             };

     cycleThru();

});

......还有一些起始的css ......

ul#cyclelist {width:200px;border:solid;position:relative;overflow:hidden;height:200px}
ul#cyclelist li {font-size:1.4em;padding:20px;opacity:0;position:absolute}

您已经拥有HTML,但万一需要示例......

<ul id="cyclelist">
  <li><div>First Div</div></li>
  <li><div>Second Div</div></li>
  <li><div>Third Div</div></li>
</ul>

我很乐意为此而感到荣幸,但它直接来自CSS-Tricks http://css-tricks.com/snippets/jquery/cycle-through-a-list/

答案 3 :(得分:1)

没有人会看到这个,但以防万一...

<script>
$(document).ready(function() {
       $('#picOne').fadeIn(1000).delay(3000).fadeOut(1000);
       $('#picTwo').delay(5000).fadeIn(1000).delay(3000).fadeOut(1000);
});
</script>

这是没有循环它的......

那将是

<script>
$(document).ready(function() {
    function animate(){
        $('#picOne').fadeIn(1000).delay(3000).fadeOut(1000);
        $('#picTwo').delay(5000).fadeIn(1000).delay(3000).fadeOut(1000);    
    }
    animate();  
    setInterval(animate, 10000);
}); 
</script>

答案 4 :(得分:0)

此尝试使用来自jquery.com的小型烹饪功能等待。

函数doFading假设顶部div的id为“a4​​”。

function doFading() {
      $("#a4").wait(3000)
      .fadeOut("slow")
      .wait(3000)
      .fadeIn("slow",doFading);
    }

$.fn.wait = function(time, type) {
        time = time || 1000;
        type = type || "fx";
        return this.queue(type, function() {
            var self = this;
            setTimeout(function() {
                $(self).dequeue();
            }, time);
        });
    };

答案 5 :(得分:0)

如果您还想拥有xfade。使用floyed的脚本,但进行我使用过的更改。唯一的问题是你想要显示的第一个图像应该是li元素中的第二个

$(document).ready(function() {

         var j = 0;
         var delay = 5000; //millisecond delay between cycles
         function cycleThru(){
                 var jmax = $("ul#cyclelist li").length -1;
                 $("ul#cyclelist li:eq(" + j + ")")
                         .animate({"opacity" : "1"} ,1000)
                         .animate({"opacity" : "1"}, delay);
             $("ul#cyclelist li:eq(" + j + ")").next().animate({"opacity" : "1"} ,1000);    
             $("ul#cyclelist li:eq(" + j + ")")
                         .animate({"opacity" : "0"}, 1000, function(){
                                 (j == jmax) ? j=0 : j--;
                                 cycleThru();
                         });
                 };

         cycleThru();

 });

答案 6 :(得分:0)

我知道这已经过时了,但我想我会分享我为完成这件事而做的事情

$(document).ready(function() {
    var delay = 500;
    $("#mydiv").bind('fadein', function()
    {
        $(this).fadeOut(1000, function()
        {
            $(this).delay(delay).trigger('fadeout');
        });
    });

    $("#mydiv").bind('fadeout', function()
    {
        $(this).fadeIn(1000, function()
        {
            $(this).delay(delay).trigger('fadein');
        });
    });

    $("#mydiv").fadeIn(1000, function()
    {
        $(this).trigger("fadein");
    });
});

然后在你希望它停止时调用它

$("#mydiv").stop().hide();