2011-04-27 114 views
0

我正在建立一個自定義的lightboxing系統(因爲我不喜歡那裏的任何處理它),我需要一種方法來檢測燈箱是否已經打開。JavaScript使用任何數字

我想要做的是這樣的:

if (getElementById("lb" + ##).clientHeight > 0) { 
    // do nothing 
} else { 
    // execute code 
} 

凡##代表任意兩個數字的任意組合,因此,如果我有

<div class="lightbox" id="lb01"> 
    <!-- empty --> 
</div> 
<div class="lightbox" id="lb02"> 
    <!-- empty --> 
</div> 

我可以,如果一個檢測他們正在展示,如果是,則不打開另一個。

編輯:我真的不喜歡使用jQuery,這似乎應該比我得到的一些答案更容易。我願意改變任何事情使其發揮作用,這些類或ID都不是最終的。

編輯2:想出了一個更簡單的方法來做到這一點。我設置了一個全局變量var lb = 0;,然後檢測該變量的值,如果它等於0,它將運行該函數並將該值更改爲1.當我運行閉合函數時,它將該值更改爲0。從不止一個開放,沒有你們給我的那些瘋狂的JS東西。

基本上,代碼現在看起來像這樣,並且完全像我想要的那樣工作。

var lb = 0; 

function lightbox(id) { 
    if (lb == 0) { 
    lb = 1; 
    } else { 
    // do nothing 
    } 
} 

function hideme(id) { 
    lb = 0; 
} 
+0

跟蹤數組中的所有div元素都可以考慮... – Varun 2011-04-27 03:44:24

+0

[對JQUERY的抵抗力很強] – 2011-04-27 04:17:13

+0

@Ates Goral你打算讓jquery-women穿一個'$('#niqab')',我們都必須爲'$('。Resigprayers')'祈禱'一天一次? – KooiInc 2011-04-27 04:47:03

回答

1

選項1:如果你打開/關閉一個盒子,你可以指定/更改像isOpen屬性:

[boxelement].isOpen = true/false 
if ([boxelement].isOpen) { } 

選項2:工作與類名:

[boxelemnt].className += ' open'; 
if ([boxelement].className.match(/open/i)) { } 
//on close 
[boxelement].className = [boxelement].className.replace(/open/i,''); 
+0

這就是我最終使用的,但有點不同。我把我在原來的帖子中使用的東西放進去。 – JacobTheDev 2011-04-27 16:07:38

2

使用類,或(如果它是一個選項)jQuery

+0

如何用JS修改類?我所能找到的信息都是ID。 – JacobTheDev 2011-04-27 03:41:49

+0

要遍歷燈箱獲取它們的ID:'var lbs = document.getElementsByClass(「lightbox」); for(var i = 0; i mattsven 2011-04-27 03:43:53

+0

我覺得這太瘋狂了,過於複雜。應該有一個更簡單的方法來做到這一點... – JacobTheDev 2011-04-27 03:49:20

1

jQuery是一個不錯的選擇。沿着這些線路的東西可能是你要去...

$('.lightbox').click(function() { 
    $('.lightbox').removeClass('.active'); //remove from all .lightbox 
    $(this).addClass('.active'); //add .active to the current element 
} 

這樣一次只有一個將被激活一次。這只是基本的想法,根據您的DOM結構,您的代碼可能會更復雜。

0

討厭 「收藏夾」效果 - 他們模糊了頁面內容,讓我等待看到圖像,同時觀看開發人員認爲我希望看到的一些動畫(在第二次或第三次之後這是真的 annonying) - 所以在dep愛他們。

創建一個對象來存儲對div的引用,然後根據它們的狀態給它們一個className。要查看一個或兩個是否「活躍」,請檢查他們是否具有活動狀態類。在使其處於活動或休眠狀態時,請設置適當的課程。

一些簡單的className實用功能:

function hasClassName(el, cName) { 

    if (typeof el == 'string') el = document.getElementById(el); 

    var re = new RegExp('(^|\\s+)' + cName + '(\\s+|$)'); 
    return el && re.test(el.className); 
} 

function addClassName(el, cName) { 

    if (typeof el == 'string') el = document.getElementById(el); 

    if (!hasClassName(el, cName)) { 
     el.className = util.trim(el.className + ' ' + cName); 
    } 
} 

function removeClassName(el, cName) { 

    if (typeof el == 'string') el = document.getElementById(el); 

    if (hasClassName(el, cName)) { 
     var re = new RegExp('(^|\\s+)' + cName + '(\\s+|$)','g'); 
     el.className = trim(el.className.replace(re, '')); 
    } 
} 

function trim(s) { 
    return s.replace(/(^\s+)|(\s+$)/g,'').replace(/\s+/g,' '); 
} 

使用與模塊模式或什麼,如果你不想讓他們爲全局。

+0

重點不在於大量內容處於瘋狂的燈箱中,我只是希望他們展示某些圖片的較大版本,而不是打開新標籤並將用戶帶離該網站。我也不太關心燈箱,但它比打開一個新標籤和混淆不熟悉電腦的人更好。 – JacobTheDev 2011-04-27 14:37:24

相關問題