我想获得DIV元素的尺寸(用于在光标位置显示弹出菜单),而它是style.display='none;'
,但是DIV的尺寸总是返回0.唯一的方法我似乎是能够获得尺寸的是将DIV style.display='block;'
设置为0,0然后将其移动到所需的位置,但这看起来很跳跃。
我尝试在可见屏幕区域外显示DIV,但这不起作用。有没有办法在隐藏DIV时获取clientWidth
和clientHeight
值?
答案 0 :(得分:10)
如果您的DIV不可见,您将无法获得其尺寸。
但是,有一种解决方法。你的div必须是"可见",但这并不意味着它的不透明度和位置必须是1和相对的。
将不透明度设置为0,将位置设置为"绝对值"并且你将能够获得DIV尺寸。
修改
由于我认为会有更多人遇到类似的问题,我觉得我应该多解释一下这个问题。
如果您尝试使用JavaScript获取隐藏元素的大小,则总是会得到0.
因此,有一些技术可以在不向用户显示元素的情况下获得实际大小。我最喜欢的是上面已经写过的那个。以下是更详细的步骤:
您将元素不透明度设置为0.这样,当您获得尺寸时,它不会显示给最终用户。
您将元素位置设置为"绝对"。这样它就不会占用任何空间。
现在将显示设置为" inline-block"是安全的。
您阅读了元素尺寸。这一次,你将获得真正的价值。
您将显示设置回"隐藏"并将不透明度和位置设置回原始值。
现在你有一个隐藏元素的大小。
答案 1 :(得分:3)
如果您想知道屏幕上元素的大小而不显示它,则需要将其绘制到屏幕上但不显示。
为了获得clientHeight和clientWidth,您需要将其渲染,以便根据屏幕当前状态执行计算(除非您有预编程的宽度和高度,我猜您没有)< / p>
您可以在MDN here
了解更多信息所以你有选择:
fixed
或absolute
)结合z-index
或opacity
width: 0
和height: 0
以及overflow: hidden
然后使用scrollHeight
和scrollWidth
查找溢出大小选择最适合您网站的选项,考虑响应能力和screen reflows and repaints
等内容