2012-10-14 88 views
3

我已經循環fadeIn/fadeOut。
在懸停我想要淡入淡出 - >停止效果,並重新啓動動畫在鼠標出。
不能弄明白:(jquery fadeIn循環停止,但在停止不工作之前完成褪色

HTML:

<style> 
div{ 
width:300px; 
height:300px; 
background-color:black; 
}​ 
</style> 

<div> 
</div> 

這裏是js代碼:

function fade(){ 
$('div').fadeIn(2000, function(){ 
    $('div').fadeOut(2000, fade());       
    }) 
} 

fade(); 

$('div').hover(function(){ 
    $('div').fadeIn({duration:100, queue:false}).stop(true, true); 
},function(){ 
    fade(); 
});​ 

這裏是一個的jsfiddle鏈接:
http://jsfiddle.net/5Zqcu/55/

謝謝尋求幫助

+1

仍然不清楚你想在這裏做什麼。 –

回答

1

u需要停止之前做動畫/淡入:

function fade(){ 
    $('div').fadeIn(2000, function(){ 
     $('div').fadeOut(2000, fade);       
    }) 
} 
fade(); 

$('div').hover(function(){ 
    $(this).stop().animate({opacity:1},100); 
},function(){ 
    fade(); 
});​ 
2

我已經修改了fiddle

function fade(){ 
    $('div').fadeIn(2000, function(){ 
     $('div').fadeOut(2000, fade);       
    }) 
} 

fade(); 

$('div').hover(function(){ 
    $('div').stop(true); 
},function(){ 
    fade(); 
});​ 
+0

'stop'不接受回調,它在你的小提琴中起作用(停止動畫做出意想不到的事情),因爲它正在評估回調爲真值並清除事件隊列。您可以簡單地將其更改爲「停止(真)」,也不需要懸停的附加機箱。 –

+0

另外需要注意的是fadeIn完成後調用fade函數,而不是在fadeOut完成後調用,所以它正在排隊更多的動畫。將'.fadeOut(2000,fade())'改爲'.fadeOut(2000,fade)'來解決這個問題。 –

+0

更正!感謝您的建議:) –

1

看來你需要某種脈衝的元素,它淡入和淡出,直到你的將鼠標懸停在它應該變成完全不透明的地方。您最好使用fadeTo,因爲fadeInfadeOut通常將起始不透明度視爲所示的不透明度。

此外,您不需要使用回調來排列下一個動畫,因爲它們會自動排隊到fx隊列,因此您可以將它們串聯在一起。如果您想停止動畫,則需要使用stop(true),如果您使用stop()則會停止當前動畫,但會開始下一個動畫。

function fade() { 
    $("div").fadeTo(2000, 0).fadeTo(2000, 1, fade); 
} 

fade(); // Start throbbing 

$("div").hover(function() { 
    // You want to clear the queue but not call the complete callback 
    // and then rapidly fade in 
    $(this).stop(true).fadeTo(100, 1); 
}, fade); 

這裏是更新的小提琴http://jsfiddle.net/5Zqcu/66/