好的,不使用.delay()
并将一个动画的开始链接到前一个动画的精确完成(不依赖于计时器和动画的同步)并使用此重复序列实现动画:
- 宙斯可见,宙斯不可见
- 暂停 5 秒
- 淡出宙斯
- 淡入宙斯
- 淡出宙斯
- 淡入宙斯
- 重复
你可以这样做:
$(document).ready(function() {
var z1 = $('#zeus');
var z2 = $('#zeuss').hide();
function cycle() {
setTimeout(function() {
z1.fadeOut(1000, function() {
z2.fadeIn(1000).fadeOut(1000, function() {
z1.fadeIn(1000, cycle)
});
});
}, 5000);
}
cycle();
});
如果您只想在第一个周期之前暂停 5 秒而不是在接下来的周期中(在您的问题中我并不完全清楚),它可以是这样的:
$(document).ready(function() {
var z1 = $('#zeus');
var z2 = $('#zeuss').hide();
function cycle() {
z1.fadeOut(1000, function() {
z2.fadeIn(1000).fadeOut(1000, function() {
z1.fadeIn(1000, cycle)
});
});
}
// start the fadeIn/fadeOut cycling after 5 seconds
setTimeout(cycle, 5000);
});
仅供参考,名称的选择zeus
非常zeuss
令人困惑。很容易让他们混淆,并且很容易在代码中出错。
如果你有一个可以使用的更现代的 jQuery 版本.delay()
,那么它会更简单一点:
$(document).ready(function() {
var z1 = $('#zeus');
var z2 = $('#zeuss').hide();
function cycle() {
z1.delay(5000).fadeOut(1000, function() {
z2.fadeIn(1000).fadeOut(1000, function() {
z1.fadeIn(1000, cycle)
});
});
}
cycle();
});