如何重复(循环)Jquery fadein - fadeout - fadein

时间:2012-02-16 21:46:34

标签: jquery delay fadein fadeout

我正在努力学习我的第一个jQuery脚本。我的页面上有一个DIV,可以通过CSS隐藏。然后,我有这个脚本运行,使其淡入,淡出,然后再次淡入:

<script type="text/javascript">
  (function($) {
    $(function() {
      $('#abovelogo').fadeIn(1000).delay(2000).fadeOut(1500).delay(2000).fadeIn(1500);
    }); 
  })(jQuery);
</script>

这部分工作正常。现在,我的问题:

如何更改它以便此脚本(永远)运行循环而不是仅运行一次?

提前致谢! -Nate

3 个答案:

答案 0 :(得分:21)

将您的代码放在setInterval

$(function () {
    setInterval(function () {
        $('#abovelogo').fadeIn(1000).delay(2000).fadeOut(1500).delay(2000).fadeIn(1500);
    }, 5000);
});

由于只要页面处于活动状态就会运行,因此您应该尽一切可能优化代码,例如,您可以在间隔之外缓存选择:

$(function () {
    var $element = $('#abovelogo');
    setInterval(function () {
        $element.fadeIn(1000).delay(2000).fadeOut(1500).delay(2000).fadeIn(1500);
    }, 5000);
});

setInterval的文档:https://developer.mozilla.org/en/window.setInterval

此外,您可以使用每个动画中的回调函数来调用一个又一个动画,而不是使用.delay()

$(function () {
    var $element = $('#abovelogo');
    setInterval(function () {
        $element.fadeIn(1000, function () {
            $element.fadeOut(1500, function () {
                $element.fadeIn(1500)
            });
        });
    }, 5000);
});

以下是演示:http://jsfiddle.net/xsATz/

您也可以使用setTimeout并递归调用函数:

$(function () {
    var $element = $('#abovelogo');
    function fadeInOut () {
        $element.fadeIn(1000, function () {
            $element.fadeOut(1500, function () {
                $element.fadeIn(1500, function () {
                    setTimeout(fadeInOut, 500);
                });
            });
        });
    }

    fadeInOut();
});

以下是演示:http://jsfiddle.net/xsATz/1/

答案 1 :(得分:1)

<script type="text/javascript">
function doFade() {
    $('.foo').toggleClass('fooAct');
    setTimeout(doFade, 1000);
}
$(document).ready(function(){
    doFade();
});
</script>
<style>
div {
height:200px;
background:black;   
}
.foo {
transition: opacity 2s;
-moz-transition: opacity 2s; /* Firefox 4 */
-webkit-transition: opacity 2s; /* Safari and Chrome */
-o-transition: opacity 2s; /* Opera */
opacity:0.1;
}
.fooAct {
opacity:1;
}
</style>
<div class="foo"></div>
只是想象力。你可以用css3做到这一点。我希望这也可以帮到你。做这种事情,css应该更适合浏览器性能而不是jQuery。

答案 2 :(得分:1)

我在使用setTimeout方法时遇到了一些问题。 “触发器”可能更好:

var $element = $('.banner');
$element.bind('cusfadeOut',function() {
        $(this).fadeOut(500,function() {
                $(this).trigger('cusfadeIn');
        });
});
$element.bind('cusfadeIn',function() {
        $(this).fadeIn(1000, function() {
                $(this).trigger('cusfadeOut');
        });
});
$element.trigger('cusfadeOut');