javascript - 在存在 CSS 缩放的情况下,如何使用 getBoundingClientRect() 获取屏幕坐标?
问题描述
我正在尝试在屏幕坐标中使用 Javascript 查找 HTML 元素的边界框,以便我可以使用外部工具(例如屏幕录制功能)自行截取该元素的屏幕截图/视频ffmpeg
。x11grab
如果没有 CSS 缩放,那么我可以找到元素的边界框,elem
如下所示:
let viewportTop = window.screenY + (window.outerHeight - window.innerHeight);
let viewportLeft = window.screenX;
let rect = elem.getBoundingClientRect();
let width = rect.width;
let height = rect.height;
let left = viewportLeft + rect.left;
let top = viewportTop + rect.top;
然后我可以使用这些width, height, left, top
坐标在浏览器窗口上记录所需的框。
但是,有时我想增加元素的缩放以使事情更容易看到:
elem.style.zoom = "2";
完成此操作后,由返回的边界框elem.getBoundingClientRect()
现在按比例缩小了2
. 如果我使用上面的方法来计算我的录制边界框,它不再与元素对齐。
我在调用window.getComputedStyle(elem, null).getPropertyValue("zoom")
、解析缩放数字并使用它来更正边界框方面取得了一些成功。但是,这不是一个完美的解决方案——如果我想缩放document.body
一定数量并且还要缩放目标元素一定数量怎么办?
所以,我想知道是否有一种通用的方法可以将坐标转换elem.getBoundingClientRect
为屏幕坐标,即使在 CSS 缩放应用于各种元素时也能正常工作。
- 我考虑使用浏览器自己的缩放而不是 CSS 缩放,但我宁愿不使用,因为我使用 Selenium 来设置这些东西,而且我在这里看到了关于使用 Selenium 调整浏览器缩放的可怕警告。
解决方案
推荐阅读
- php - 检查类别是否存在于具有 csv 值格式的 MYSQLI 表列中
- php - 计算命名/创建列的与计数/SQL 查询相乘
- java - 如何以 opencv 作为依赖项正确构建我的 javaFX 应用程序?
- ruby-on-rails - React 客户端无法正确分发接收到的 ActionCable 广播
- php - PHP从基本授权获取用户名
- javascript - UniSharp laravel-filemanager 与 TinyMCE 5 的集成
- javascript - 仅在第一个时才考虑动态添加的样式表
- mysql - 如果有值如何选择count()但如果值为0则不选择任何内容
- dart - 无法在颤振底部表中使用范围模型,对话框
- c - 在另一个结构中创建结构数组