我有一个测试页http://www.emoceanstudios.com.au/test.php,这是相关的脚本:
<script type="text/javascript">
function slide_out(){
$('#red-block').animate({
marginLeft: -278
}, 500);
$('#yellow-block').animate({
marginTop: -316
}, 500);
$('#gray-block').animate({
marginLeft: 278
}, 500, function(){
$('#three-color-container').fadeOut(500, function() {
$('#three-color-container-new').fadeIn(500, function() {
window.setTimeout(function(){slide_in()}, 4000);
});
});
});
}
function slide_in(){
$('#three-color-container-new').fadeOut(500, function() {
$('#three-color-container').fadeIn(500, function(){
$('#red-block, #yellow-block, #gray-block').animate({
marginLeft: 0,
marginTop: 0
}, 500, function() {
window.setTimeout(function(){slide_out()}, 4000);
});
});
});
}
window.setTimeout(function(){slide_out()}, 4000);
</script>
现在红色黄色灰色块滑动如下: out,in,out,in,out然后flash(这不是我想要的),只能工作两个半循环。 如果我将计时器从4000设置为6000,它最多可以运行3个循环,然后也会中断。
我希望它能够进出,进出,进出,进出,进出,进出,进出,进出,进出,......永远 我想问题可能出在setTimeout函数中。
答案 0 :(得分:0)
您的#red-block, #yellow-block, #gray-block
动画正在调用该setTimeout函数三次,导致整个进程在每次运行时都会重复三次,最终导致冲突。
在不改变太多代码的情况下,最佳解决方案是:
$('#red-block, #yellow-block').animate({marginLeft:0,marginTop:0},500);
$('#gray-block').animate({marginLeft:0,marginTop:0,500,function() {setTimeout(slide_out,4000);});