2012-10-24 49 views
0

我在頁面頂部的橫幅上有一個按鈕,用於在屏幕上啓動幾個yui2疊加層。每個疊加層上都有一個關閉按鈕(它只是將可見性更改爲隱藏,因此可以重用)。覆蓋層啓動後,出現的橫幅上也會出現一個按鈕,如果點擊該按鈕將關閉所有覆蓋層。如果所有疊加層都關閉,然後執行功能

這給出了使用選項關閉所有或單獨關閉每一個。這是我卡在:

如果用戶關閉一個單獨的覆蓋,關閉覆蓋後,我想檢查是否有任何其他覆蓋仍然打開。如果他們碰巧關閉了所有人,那麼我需要恢復頂部的橫幅並刪除「關閉所有按鈕」。

我可以做搜索所有疊加一個:

var elements = YAHOO.util.Dom.getElementsByClassName('test'); 

我想不出邏輯的,我需要做的通過陣列每次去,他們收的覆蓋看到所有的人都設定如果隱藏可見性。如果是這樣,那麼執行一個函數。如果頁面上仍有可見的疊加層,則不執行任何操作。

這是我想出的答案。只是不確定它是否正確。

var elements = document.getElementsByClassName('test'); 
var visiblecounter = 0; 
for (var i = 0; i < elements.length; i++) { 
    if(elements[i].style.visibility!='hidden'){ 
     alert("not hidden"); 
     visiblecounter ++;  
    }  
    } 
    ​ 
if(visiblecounter > 0){ 
    alert("all overlays are closed individually. you can remove close all button"); 
} 
+0

我發現這一點,它接近我所需要的。只是以非jQuery的方式。 [鏈接](http://stackoverflow.com/questions/1222853/use-jquery-to-check-if-all-divs-are-hidden) – Gabriel

+0

如果你打開覆蓋,爲什麼你不使用計數器在打開時增加,在關閉時遞減:如果0你處於初始狀態。 –

回答

0

你提到你正在重複使用這些疊加層,因爲你將疊加層組合起來以便再次使用,我假設你將它們放入一個數組或類似的東西中。而不是檢查DOM(這始終是昂貴的),看看它們是否可見或不可見,循環通過覆蓋檢查visible attribute,喜歡的數組:

var anyVisible = false; 
    for (i = 0; i < myOverlays.length; i+=1) { 
     anyVisible |= myOverlays[i].cfg.getProperty("visible"); 
    } 

如果任何人都可見,禁用按鈕。

+0

謝謝。我將疊加保存在一個數組中,所以這個解決方案應該很好。感謝幫助。 – Gabriel

0

我不確定是否有問題,但我會盡我所能提供幫助。這是我會做的一些事情。我也定義了一個活動類,所以我的HTML元素會寫成這樣:

<div class="john active"></div> 

並在我的CSS我會寫。

.john {display: none}; 
.active {display: block}; 

因此,默認情況下,該對象是隱藏的!但是,當您將「活動」類追加到它時,它會出現在屏幕上。所以現在我們可以做以下巫術。

$(".hideButton").click(function() { 
    $(this).removeClass("active"); 
}); 

如果我想隱藏所有其他對象,假定它們具有相同的父的DOM

$(".hideOthersButton").click(function() { 
    $(this).siblings().removeClass("active"); 
}); 

,如果我想隱藏共享同一母公司的所有對象。

$(".hideEverything").click(function() { 
    $(".parent").children().removeClass("active"); 
}); 

我希望這有助於!讓我知道你是否需要更多幫助。該解決方案使用Jquery,但您可以將邏輯重新用於其他任何事情。

+0

謝謝。我正在用這樣的東西來實現我現在擁有的東西。我在上面添加了一個註釋來解決另一個類似問題的堆棧溢出問題。除了他們使用jQuery和我的解決方案需要是YUI2或只是普通的JS。 – Gabriel

相關問題