如何在 DIV 可见之前获取客户端宽度和客户端高度



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

我试过使DIV可见的可见屏幕区域之外,但这不起作用。是否有办法得到clientWidthclientHeight值,而DIV是隐藏的?

如果div不可见,则无法获得其尺寸。

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

设置不透明度为0,位置为"绝对",你就可以得到DIV的尺寸了


编辑

因为我想更多的人会有类似的问题,我觉得我应该多解释一下我的答案。

如果你试图用JavaScript获取隐藏元素的大小,你将总是得到0。

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

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

  2. 将元素的位置设置为"absolute"。这样就不会占用空间了

  3. 现在可以安全地将显示设置为"inline-block"

  4. 读取元素的尺寸。这一次你将得到真实的值。

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

现在你有了一个隐藏元素的大小

如果你想知道一个元素在屏幕上的大小,而它又不可见,你需要把它画在屏幕上,但不显示。

为了得到clienttheight和clientWidth,你需要它被渲染,所以计算可以根据屏幕的当前状态执行(除非你有预编程的宽度和高度,我猜你没有)

你可以在MDN找到更多信息在这里

所以你有选项:

  • 使用定位(fixedabsolute)结合z-indexopacity在屏幕外创建div
  • 使用width: 0height: 0overflow: hidden,然后使用scrollHeightscrollWidth来查找溢出大小

选择最适合您网站的选项,考虑响应性、屏幕回流和重绘等因素

最新更新