2010-08-13 119 views
0

我正在創建一個教程,希望淡入淡出網頁上的每個div,除了我希望他們看到的div。我怎樣才能做到這一點使用fadeTo?如何淡入()除一個div以外的所有東西?

我目前已設置淡入淡出整個身體。我如何將它設置爲從div id「step2」中淡出身體?

代碼:

<script type="text/javascript"> 
    $("body").fadeTo("slow", 0.5, function() { 
     // Animation complete. 
    }); 
</script> 

回答

5

很難說沒有看到你的HTML,但如果step2<body>一個孩子,你可以這樣做:

試試看:http://jsfiddle.net/SS5Sm/

$("body").children(':not(#step2)').fadeTo("slow", 0.5, function() { 
    // Animation complete. 
}); 

$("body > :not(#step2)").fadeTo("slow", 0.5, function() { 
    // Animation complete. 
}); 

如果它更深層嵌套,你可以試試這個。

$("body > :not(:has(#step2))").fadeTo("slow", 0.5, function() { 
    // Animation complete. 
});​ 

儘管它對您的HTML結構做了一些額外的假設。

0

你可以使用CSS選擇器jQuery的:)

$("*:not(div#step2)").fadeTo(...) 
+7

**永遠不會使用通用選擇器(*)。永遠不會!** – jAndy 2010-08-13 13:37:40

+2

這會單獨爲每個元素排隊淡出動畫,可能會立即導致IE崩潰:) – 2010-08-13 13:37:42

+0

使用'「body:not(div#step2)」'而不是'「*:not(div#step2)」'only only跳過兩個迭代('html'和'body'),因爲'「:not(...)」'只是'「*:not(...)」'的簡寫。因此,使它與所提供的解決方案一樣快(或慢)(假設'div#step2'可能不是'body'的直接子節點)。在任何情況下,我認爲你不應該首先使用':not(...)'選擇器,因爲它總是意味着你忘記了你的元素,並試圖通過使用css選擇器來解決這個問題真的意味着生產用途。 – elslooo 2013-04-18 17:58:38

1

淡入淡出將始終在褪色的每一個元素一份工作,包括你使用jQuery選擇的一個。除非你想保持可見的div直接位於身體下方,否則這將是棘手的。爲了達到你想要的效果,你應該克隆你想要看到的div,並且絕對將它放在與原始位置相同的位置。這也意味着您需要將隱藏在容器div內的主要內容放在容器div中,所以不要淡化正文,而要淡化容器div,並將克隆的div直接置於主體下的頂層容器。

<body> 
    <div id="content-to-fade"> 
     ...<div id="div-i-want-">...</div> 
    </div> 
    <div id="copy-of-div-i-want">...</div> 
</body> 

因此在本例中,您將創建「複製的-DIV-我想做」,附加到身體,然後調用fadeTo的「內容到變臉」。

這種技術是實現拖放的一種非常常見的方式,因爲副本可以輕鬆高效地完全定位在屏幕周圍。

0

這基本上是不可能做你與你給的代碼說明什麼,因爲所有的元素都被包含在body標籤中,而且由於opacity財產繼承,一切頁面上會變成半透明。哦,並且覆蓋opacity屬性,那個單獨的div也不起作用。

相反,您需要做的事情可能是將所有內容移動到另一個div,並淡化那個。使用:not選擇器也可以工作,但它不是一個全面的解決方案 - 請注意您的頁面結構。

相關問題