我正在努力学习我的第一个jQuery脚本。我的页面上有一个DIV,可以通过CSS隐藏。然后,我有这个脚本运行,使其淡入,淡出,然后再次淡入:
<script type="text/javascript">
(function($) {
$(function() {
$('#abovelogo').fadeIn(1000).delay(2000).fadeOut(1500).delay(2000).fadeIn(1500);
});
})(jQuery);
</script>
这部分工作正常。现在,我的问题:
如何更改它以便此脚本(永远)运行循环而不是仅运行一次?
提前致谢! -Nate
答案 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();
});
答案 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');