jQuery - 动态 div 高度

Posted

技术标签:

【中文标题】jQuery - 动态 div 高度【英文标题】:jQuery - dynamic div height 【发布时间】:2010-11-29 10:21:19 【问题描述】:

我正在尝试在页面加载和窗口调整大小时调整 div 的大小。下面的代码放在</body> 之前,它在页面加载时工作正常,但在调整窗口大小时没有任何作用。我用警报测试了调整大小功能,它在调整大小时触发,但高度保持不变。

<script type='text/javascript'>
    $('#main-content') .css('height': (($(window).height()) - 361)+'px');

    $(window).resize(function()
        $('#main-content') .css('height': (($(window).height()) - 361)+'px');
        alert('resized');
    );
</script>

更新:经过长时间的休息,我发现了导致问题的原因。我正在使用 jquery 脚本在正在调整大小的同一 div 上添加样式滚动条。当我将其注释掉时,一切都会调整大小。我已经将滚动条初始化移动到与调整大小相同的函数中,并尝试了我能想到的任何变化......仍然无法让它工作。

(#main-content div 也有 .scroll-pane 类)

<script type='text/javascript'>
$(function()
    $('#main-content').css('height':(($(window).height())-361)+'px');
    $('.scroll-pane').jScrollPane(scrollbarWidth:15, scrollbarMargin:15);

    $(window).resize(function()
          $('#main-content').css('height':(($(window).height())-361)+'px');
    );
);
</script>

【问题讨论】:

【参考方案1】:

请注意,窗口调整大小功能只会在窗口调整大小后触发一次。在调整大小操作期间它不会更新,因此如果您正在拖动窗口边框进行测试,在您松开鼠标按钮之前不会发生任何变化。

另外,请确保您在 $(document).ready() 内执行此操作,如下所示:

<script type='text/javascript'>
$(function()

    $('#main-content') .css('height': (($(window).height()) - 361)+'px');

    $(window).resize(function()
        $('#main-content') .css('height': (($(window).height()) - 361)+'px');
        alert('resized');
    );
);
</script>

这是working demo。

【讨论】:

感谢您澄清主题,但我仍然没有解决问题..当我使用您的代码时,大小调整在加载或调整大小时不起作用。我不知道为什么,因为你的例子很完美!如果您有任何可能干扰的想法,请回复.. @lemon,你在 IE 中测试这个吗?我在 IE 中使用 CSS 高度方法调整 div 大小时遇到​​了问题 - 我认为解决方案是为 div 定义默认高度。 窗口调整大小事件根据浏览器的不同以不同的时间间隔触发。对于(至少是旧版本,根据我的经验)IE,它会触发每个可能的调整大小操作(然后是一些),对于 Firefox,它会根据可用资源限制事件,对于 Safari,它会以大约 100- 的定期间隔一致地触发它们200 毫秒,取决于操作(它类似于 Firefox 的模型,但触发频率要低得多)。 非常感谢。这帮助我摆脱了需要滚动条时发生的水平跳跃。使用这段代码和一点 css,我能够在不强制滚动条的情况下移除水平跳跃。【参考方案2】:

解决了!

它只需要在计算高度之前移除 jScrollPane,然后重新应用它。

<script type='text/javascript'>
$(function()
    $('.scroll-pane').css('height':(($(window).height())-361)+'px');
    $('#main-content').jScrollPane(scrollbarWidth:15, scrollbarMargin:15);

    $(window).resize(function()
          $('.scroll-pane').jScrollPaneRemove();
          $('#main-content').css('height':(($(window).height())-361)+'px');
          $('.scroll-pane').jScrollPane(scrollbarWidth:15, scrollbarMargin:15);
    );
);
</script>

【讨论】:

嘿,我试图在我的应用程序中为 div 创建动态高度,我使用了你的代码(我刚刚删除了关于滚动窗格的内容)。 :) 不错的解决方案。 Uncaught TypeError: $(...).jScrollPane is not a function ... jScrollPane 是什么?它的插件?【参考方案3】:

除非文档高度小于或等于窗口高度,否则不要执行函数。

$(function() 
  if($(document).height() <= $(window).height()) 
    $('#wrapper').css( 'height': ($(window).height()) );
    $(window).resize(function()
      $('#wrapper').css( 'height': ($(window).height()) );
    );
  
);

我遇到了内容会流出 div 的问题。

【讨论】:

以上是关于jQuery - 动态 div 高度的主要内容,如果未能解决你的问题,请参考以下文章

jQuery动态改变元素高度

jquery在加载后设置高度

使用 jQuery 检测 div 的高度何时发生变化

jquery获取div(带滑动条)内容的实际高度

根据视口高度动态设置 DIV 高度

动态设置两个浮动DIVS的高度