【问题标题】:scrollHeight property in FireFoxFireFox 中的 scrollHeight 属性
【发布时间】:2011-05-21 04:15:57
【问题描述】:

我正在开发一个函数来检测 DIV 元素内的文本是否会溢出。在这方面,我有一个在 Chrome 和 IE 中都可以使用的函数,它将元素的 scrollHeight 与 clientHeight 属性进行比较。

但在 FireFox 中,两个属性(以及 offsetHeight)总是报告相同的数字,恰好是 div 元素的高度。

如果我将 'overflow:auto' 添加到 div 样式,我确实可以从 scrollHeight 属性中获得准确的结果。但是对于我正在处理的项目来说,显示滚动条并不是一个可接受的解决方案。

有什么建议吗?

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    这是记录在案的行为:

    当一个元素的内容不 生成一个垂直滚动条,然后 它的 scrollHeight 属性等于 它的 clientHeight 属性。

    https://developer.mozilla.org/en/DOM/element.scrollHeight


    我知道它不干净,但你能做这样的事情吗?

    e.style.overflow = "scroll";
    var scrollHeight = e.scrollHeight;
    e.style.overflow = "hidden";
    

    用户看不到这一点,因为页面只有在当前没有运行 javascript 时才会重绘。

    【讨论】:

    • 即使是 jQuery 也必须执行 CSS 字段的换出技巧才能正确计算尺寸。请注意,通常您应该先保存该值,然后再恢复它,而不是假设它是隐藏的。
    • 我以为我阅读了规范,但如果我错过了,显然还不够接近。谢谢你为我指出。顺便说一句,jQuery 中的什么函数可以做到这一点?
    • 抱歉提出旧线程我在这里遇到同样的问题,即使 div 有滚动条,clientHeight 和 scrollHeight 也给我相同的价值我的浏览器是 Firefox 6.0,这是一个已知的错误吗?
    • 自 FireFox 21 版以来不再发生这种情况。
    【解决方案2】:

    Kartikaya Gupta 在 a blog post on the scrollWidth/scrollHeight properties 中解释了 Firefox 的行为。

    检测元素是否溢出的建议是使其可滚动并将scrollLeft/scrollTop 临时设置为1。当至少 scrollWidthscrollHeight 保持其值时,该元素将溢出。
    为了防止检查对用户可见,您可能希望在放置在视口的顶部或左侧的负数。

    【讨论】:

      【解决方案3】:

      在实际的 Firefox 版本中,这不再是问题,因为即使没有此处指出的 overflow="scroll" 技巧,scrollHeight 属性也可以工作。但是在某些旧版本中,它仍然会发生......

      非常感谢@thejh,你的提示对我很有用!

      【讨论】:

      猜你喜欢
      • 2016-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-07-16
      • 1970-01-01
      • 1970-01-01
      • 2018-12-13
      • 1970-01-01
      相关资源
      最近更新 更多