2012-04-18 17 views
4

我有一套divs,每個對應一組類別。當我點擊一個過濾器時,這將改變div的類並根據這些類別使它們變得易於剝奪或隱藏。我控制divs如何淡入/淡出,並且它緩慢並且很好地進行,但是每當divs消失時,那些未改變的div突然移動,以填充被隱藏的空間。如何動畫div時,他們移動填補其他div的淡出剩下的空間

如何平滑在其他人消失並且留下空位後未隱藏的div的移動?

//Before this goes a long function that decides wich divs will get their class changed 
$('#work-container > div[class*=visible]').fadeIn('slow','swing'); 
$('#work-container > div[class*=hidden]').fadeOut('slow','swing'); 

編輯:的事情http://jsfiddle.net/Ccswn/3/小提琴

+0

你有演示嗎?或者,至少,我們可以將一些代表性的HTML複製並粘貼到演示中? – 2012-04-18 15:49:31

+0

PLZ提供了一個jsfiddle http://www.jsfiddle.net – undefined 2012-04-18 15:50:33

+0

你想要比它動畫更多? http://jsfiddle.net/Ccswn/5/ – undefined 2012-04-18 16:04:34

回答

4

我建議代替​​使用animate()

$('div').click(
    function() { 
     $(this).animate({ 
      'height': 0, 
      'opacity': 0 
     }, 750, function() { 
      $(this).remove(); 
     }); 
    });​ 

JS Fiddle demo


編輯納入一個jQuery/CSS的解決方案:

更改爲.item的CSS,包括以下內容:

.item{ 
    /* other css removed for brevity */ 
    -webkit-transition: all 1s linear; 
    -moz-transition: all 1s linear; 
    -o-transition: all 1s linear; 
    -ms-transition: all 1s linear; 
    transition: all 1s linear; 
} 

並更改a.hidden以下幾點:

.hidden { 
    width: 0; /* reset everything that might affect the size/visibility */ 
    height: 0; 
    padding: 0; 
    margin: 0; 
    opacity: 0; 
    -webkit-transition: all 1s linear; 
    -moz-transition: all 1s linear; 
    -o-transition: all 1s linear; 
    -ms-transition: all 1s linear; 
    transition: all 1s linear; 
} 

使用以下jQuery:

// content animate 
$('#work-container > div[class*=hidden]').addClass('hidden'); 
return false; 

JS Fiddle demo

然後,一切似乎按你的想法工作。雖然我沒有試圖按照上面的塊中的.addClass('visible')做什麼,但我放棄了它。

這確實需要一個支持CSS轉換的瀏覽器(並且支持opacity),所以它可能不適合您的使用情況。

+0

我應該怎麼做反向動畫來讓隱藏的div再次出現?如果高度應該是動態的,我的意思是 – 2012-04-18 16:01:00

+0

這與'show'和'hide'的做法很相似。他們動畫的CSS屬性的高度/寬度/不透明度等 – 2012-04-18 16:03:32

+0

@ElaineMarley:看到編輯,希望這會爲你工作。 – 2012-04-18 17:44:57