2012-03-30 61 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