2012-03-30 66 views
1

我有一個狀態欄顯示在頁面內容上的問題。問題是當我嘗試計算內容的頁邊距(這顯示內容正確)時,狀態欄高度始終返回0 px,因爲狀態欄在頁面加載後顯示。動態檢查div是否顯示,jquery css(display:none/block)

有沒有辦法動態檢查div #statusbar是否顯示?生活?

這樣的事情,但動態:

$('#statusbar').is(':visible') { 
    $('.content').css('margin-top', $('#statusbar').height()); 
} 

我品牌的SharePoint這樣的狀態欄獲得由框架顯示。有了這個佈局,我不能使用CSS來做到這一點。

檢查此代碼:這是發生了什麼事。

http://jsfiddle.net/qcbDy/12/

上例中的延遲僅僅是你們明白髮生了什麼。狀態欄在DOM /站點加載後顯示。

我需要聽取特定選擇器上的更改。 (高/ vibility等)

解決方案

http://www.west-wind.com/weblog/posts/2011/Feb/22/A-jQuery-Plugin-to-monitor-Html-Element-CSS-Changes

或@naim謝赫提到

jQuery event to trigger action when a div is made visible

+0

你是什麼意思的「動態」? – kontur 2012-03-30 11:31:31

+0

這不可能在CSS中解決這個問題嗎?你有什麼跡象表明(觸發)知道你的'.content'變化了嗎? – m90 2012-03-30 11:31:41

+0

@ m90對不起,但我不能得到任何觸發器,我已經嘗試了幾天得到觸發器來做到這一點。沒有任何方法可以檢查div是否可見?檢查我的jsfiddle網址 – Plexus81 2012-03-30 11:51:50

回答

1
+0

我知道延遲,但我可以如果狀態欄總是在給定的時間之前顯示,那麼就不會依賴,所以我需要一個事件來檢查選擇器是否發生了變化 – Plexus81 2012-03-30 12:40:50

+0

我編輯了答案,並且檢查你的類名拼寫在HTML標記和jQuery腳本 – 2012-03-30 13:00:04

+0

不起作用。請參閱http://jsfiddle.net/qcbDy/27/ – Plexus81 2012-03-30 13:04:15

0

如果你設置什麼狀態欄寬度和內容寬度在一定數量,並使他們都浮動左。然後,如果狀態欄出現,css會自動按下內容! (我想這將工作)

例如在html:

<div id="wrapper"> 
    <div id="status_bar"></div> 
    <div id="content"></div> 
</div> 

而CSS:

#wrapper { 
    width: 900px; 
    margin: 0 auto; 
} 

#status_bar { 
    width: 900px; 
    float: left; 
} 

#content { 
    width: 900px; 
    float: left; 
} 

也許你可以使用這個:

$('.statsubar').delay(2000).fadeIn(400). 
queue(function() { 
    $('.statsubar').css({'position' : 'relative'}); 
    $(this).dequeue();   
}); 

使用嘗試on()方法:

var wrapper = $('#wrapper'); 


function test() { 
var status = $('.statsubar'); 

status.css({'position' : 'relative'}); 
} 

wrapper.on('load', '#statsubar', test); 

對於「#wrapper指定」元素使用從開始時加載

如果一個元素的「.statsubar」 DIV不會在原來的DOM存在,但之後的負載(通過Ajax調用)這應該工作:

$('.statsubar').load(function() { 
    $('.statsubar').css({'position' : 'relative'}); 
}); 
+0

我知道CSS是最好的方式,但我的佈局我不能使用CSS :( – Plexus81 2012-03-30 11:43:43

+0

檢查我的答案,我使用.queue()方法 – kapantzak 2012-03-30 12:02:28

+0

抱歉,但我不能使用這個,因爲我不知道當狀態欄得到顯示時,如果狀態欄將被顯示,我一直沒有任何控制 – Plexus81 2012-03-30 12:18:46

0

嘗試執行代碼的頁面加載後:

$(document).ready(function() { 
    // put your code here 
}); 
+0

代碼已經在document.ready中運行,沒有任何運氣,問題是在加載整個站點後顯示statsbar。 – Plexus81 2012-03-30 11:44:33