如何获得clientWidth& DIV之前的clientHeight可见

时间:2015-06-04 07:26:15

标签: javascript

我想获得DIV元素的尺寸(用于在光标位置显示弹出菜单),而它是style.display='none;',但是DIV的尺寸总是返回0.唯一的方法我似乎是能够获得尺寸的是将DIV style.display='block;'设置为0,0然后将其移动到所需的位置,但这看起来很跳跃。

我尝试在可见屏幕区域外显示DIV,但这不起作用。有没有办法在隐藏DIV时获取clientWidthclientHeight值?

2 个答案:

答案 0 :(得分:10)

如果您的DIV不可见,您将无法获得其尺寸。

但是,有一种解决方法。你的div必须是"可见",但这并不意味着它的不透明度和位置必须是1和相对的。

将不透明度设置为0,将位置设置为"绝对值"并且你将能够获得DIV尺寸。

修改

由于我认为会有更多人遇到类似的问题,我觉得我应该多解释一下这个问题。

如果您尝试使用JavaScript获取隐藏元素的大小,则总是会得到0.

因此,有一些技术可以在不向用户显示元素的情况下获得实际大小。我最喜欢的是上面已经写过的那个。以下是更详细的步骤:

  1. 您将元素不透明度设置为0.这样,当您获得尺寸时,它不会显示给最终用户。

  2. 您将元素位置设置为"绝对"。这样它就不会占用任何空间。

  3. 现在将显示设置为" inline-block"是安全的。

  4. 您阅读了元素尺寸。这一次,你将获得真正的价值。

  5. 您将显示设置回"隐藏"并将不透明度和位置设置回原始值。

  6. 现在你有一个隐藏元素的大小。

答案 1 :(得分:3)

如果您想知道屏幕上元素的大小而不显示它,则需要将其绘制到屏幕上但不显示。

为了获得clientHeight和clientWidth,您需要将其渲染,以便根据屏幕当前状态执行计算(除非您有预编程的宽度和高度,我猜您没有)< / p>

您可以在MDN here

了解更多信息

所以你有选择:

  • 使用定位(fixedabsolute)结合z-indexopacity
  • 创建离线屏幕
  • 使用width: 0height: 0以及overflow: hidden然后使用scrollHeightscrollWidth查找溢出大小

选择最适合您网站的选项,考虑响应能力和screen reflows and repaints

等内容