我正在尝试实现一种效果,让我一个一个地淡入所有指定的 div。我写了这个函数:
jQuery:
(function($) {
$.fn.fadeAll = function (options) {
options = $.extend({}, $.fn.fadeAll.defaults, options || {});
var loops = $(this).length;
return $(this).each(function (i, obj) {
$(obj).fadeTo(options.speed, options.opacity);
if (i++ >= loops) {
if (typeof (options.onComplete) == 'function') {
options.onComplete.call();
}
}
//alert($(obj).html());
});
};
$.fn.fadeAll.defaults = {
speed: 300,
opacity: 1,
onComplete: null
};
})(jQuery);
在每个循环中,我设置了一个警报,以观察它循环遍历我的所有对象,当我这样调用它时它做得很好
调用函数:
$('.nav-div').fadeAll({
onComplete:
function () {
alert('done');
}
});
HTML:
</head>
<body>
<section id="global-wrapper">
<section id="load-wrapper">
<div>
<h1>LOADING</h1>
<h3 id="load-percent"></h3>
</div>
</section>
<section id="main-wrapper">
<h1>TITLE</h1>
<nav>
<div class="nav-div">MENU ITEM 1</div>
<div class="nav-div">MENU ITEM 2</div>
<div class="nav-div">MENU ITEM 3</div>
<div class="nav-div">MENU ITEM 4</div>
</nav>
</section>
</section>
</body>
</html>
CSS:
body {
background: #000;
color: #eee;
}
#global-wrapper {
min-height: 2000px;
}
#load-wrapper {
margin: 0 auto;
width: 65%;
height: 400px;
position: absolute;
top: 200px;
left: 17.5%;
}
#load-wrapper > div {
background: url('/Content/Images/loading.gif') center center no-repeat;
width: 100%;
height: 300px;
}
#load-wrapper > div > h1 {
font-family: 'IM Fell DW Pica', serif;
font-size: 30px;
color: #eee;
text-align: center;
line-height: 100px;
}
#load-wrapper > div > h3 {
font-family: 'IM Fell DW Pica', serif;
font-size: 30px;
color: #eee;
text-align: center;
line-height: 100px;
margin-top: 100px;
}
#main-wrapper {
margin: 0 auto;
width: 1024px;
}
#main-wrapper > h1 {
opacity: 0;
font-size: 30px;
font-family: 'IM Fell DW Pica', serif;
}
#main-wrapper > nav > div {
opacity: 0;
float: left;
margin-right: 20px;
font-family: Gruppo;
font-size: 18px;
cursor: pointer;
}
我所有的回调都按预期工作,一切都开始了。但是,我的问题是,当它通过循环时,它实际上并没有执行 fadeTo 部分;相反,它会等到它完成循环然后它们都立即淡入。
谁能指出我在这里做错了什么?我确定这是我缺少的一些简单的东西,或者只是我缺少的 jQuery/js 的一些功能。任何帮助是极大的赞赏!