javascript - 考虑到 Windows 10 全局缩放的鼠标位置
问题描述
在我的网页中使用mousemove
事件及其clientX
和clientY
属性。它按预期工作,我以这种方式标准化坐标:
MousePos.x = ((event.clientX- Renderer.domElement.offsetLeft) / Renderer.domElement.width) * 2 - 1;
MousePos.y = -((event.clientY - Renderer.domElement.offsetTop) / Renderer.domElement.height) * 2 + 1;
它按预期工作,现在 x 和 y 在 -1 到 1 的范围内,而不是 0 到宽度/高度。
当机器具有全局缩放时,就会出现问题;Windows 10 有这样的选项。假设我的屏幕是 1920 像素宽,并且缩放设置为 100%(无全局缩放),那么event.clientX
最大值将为 1920。如果缩放是其他值,则它不会是屏幕宽度的最大值,这不会给我 1 值,并且标准化的鼠标位置将是错误的。
所以我的问题是:如何考虑 Windows 10 的全局缩放?
如果我可以读取这个值,我可以通过这种方式更正我的鼠标位置:
let scale = 1.25;
MousePos.x = ((event.clientX * scale - Renderer.domElement.offsetLeft) / Renderer.domElement.width) * 2 - 1;
MousePos.y = -((event.clientY * scale - Renderer.domElement.offsetTop) / Renderer.domElement.height) * 2 + 1;
但我想知道是否有更好的解决方案。
解决方案
显然domElement
有另一个属性:(clientWidth
或高度)应该用于规范化。
以下按预期工作:
MousePos.x = ((event.clientX - Renderer.domElement.offsetLeft) / Renderer.domElement.clientWidth) * 2 - 1;
MousePos.y = -((event.clientY - Renderer.domElement.offsetTop) / Renderer.domElement.clientHeight) * 2 + 1;
推荐阅读
- javascript - Scraping HTML Tables with rowspan attributes using node and cheerio.js
- php - Laravel Application in production on Share Host don't POST, PUT or DELETE in Chrome, Safari and Edge but does in Firefox
- react-native - React Native 升级到 0.64.1 后 Redux Saga 调用停止返回值
- sql-server - 如何解决 RS 错误“这可能是由于数据库中的连接失败、超时或磁盘条件低。”?
- java - 将 jar 文件加载到 Apache Flink 仪表板时出现错误
- java - 如何在 Android Studio (Java) 中的标记点击上显示可修改的表单?
- php - 通过 SSH 连接到 MySQL
- python - 如何合并重复行并用另一行的值填充 NaN 单元格?
- haskell - GHC 生成的 .hi .p_hi 和 .dyn_hi 文件有什么区别
- powershell - 是否可以简化这个 PowerShell 闭包的想法?