我有以下内容,但在if语句完成循环隐藏元素后,$("span#slogan").fadeIn("slow");
没有运行。
我怎样才能使fadeIn成为最后一个运行的东西?
<style type="text/css">
#hidden span{
display:none;
float:left;
font-size:20px;
}
</style>
<script type="text/javascript">
$(document).ready(function()
{
function showDiv() {
if($('#hidden span:not(#slogan)').is(':hidden')) {
$('#hidden span:not(#slogan):hidden:first').show("bounce", { times:3 }, 500);
setTimeout(showDiv, 500);
}
$("span#slogan").fadeIn("slow");
}
$("button").click(function() {
showDiv();
});
});
</script>
<button>Click</button>
<div id="hidden">
<span>T</span>
<span>e</span>
<span>x</span>
<span>t</span>
<span id="slogan">Slogan</span>
</div>
的回调
我无法在.show
上使用回调,因为.show
因为if循环而运行了四次,如果我使用fondIn回调那么我会有四次相同的fadeIn。
答案 0 :(得分:2)
我已经为你创建了这个JSFiddle,重要的是要注意我删除了弹跳效果,但是我无法在jsFiddle中包含它。
关键是在回调检查中是否所有跨距都可见,如果是这样的话,淡出口号..
function showDiv() {
if($('#hidden span:not(#slogan)').is(':hidden')) {
$('#hidden span:not(#slogan):hidden:first').show("bounce", { times:3 },function() {
if($('#hidden span:not(#slogan):hidden:first').length==0){
$("span#slogan").fadeIn("slow");
}
});
setTimeout(showDiv, 500);
}
}
答案 1 :(得分:1)
只是一种没有setTimeout的方法:
function showDiv() {
$('#hidden span:not(#slogan)').each(function(i,e){
$(this).delay(i*300).show("bounce", { times:3 }, 500, function(){
$('#slogan').fadeIn('slow');
});
});
}
<小时/> 编辑:(为了避免
#slogan
淡入淡出4次/次。请参阅评论)
function showDiv() {
var c = 0;
$('#hidden span:not(#slogan)').each(function(i,e){
c++;
$(this).delay(i*300).show("bounce", { times:3 }, 500);
});
$('#slogan').delay(c*300).fadeIn('slow');
}
<小时/> 使用.length: demo3
function showDiv() {
$('#hidden span:not(#slogan)').each(function(i,e){
$(this).delay(i*300).show("bounce", { times:3 }, 500);
});
$('#slogan').delay( $('#hidden span').length * 300 ).fadeIn('slow');
}
答案 2 :(得分:0)
function showDiv() {
if($('#hidden span:not(#slogan)').is(':hidden')) {
$('#hidden span:not(#slogan):hidden:first').show("bounce", { times:3 }, 500, function(){
$("span#slogan").fadeIn("slow");
});
}
}
这可能适合你。