无论缩放如何,获取浏览器窗口位置
如何获取浏览器窗口的左边缘(包括菜单、边框、标题等),而不将其“固定”以考虑缩放级别? (此问题解决基本问题,但不考虑缩放。)。
window.screenLeft 或 window.screenX 在 Chrome 和 Safari 上工作正常,但它们使用 IE6、IE8 和 Firefox 报告“固定”值。
我认为我可以更可靠地获取屏幕的尺寸,也许可以使用它或 screen.deviceXDPI 确定缩放系数,但我不确定如何使用它来纠正位置。
(你们中的一些人可能想知道为什么我要这样做。这是因为培训网站会在用户屏幕的右侧打开一个浏览器窗口。浏览器使用脚本标记 hack 与我的应用程序进行通信。应用程序想要调整自身大小,使其完全适合浏览器窗口的左侧。)
编辑
我应该提到两件事:
- 我问的是浏览器缩放,您通常可以从“视图”菜单或按住 Ctrl 并转动鼠标滚轮进行访问。由于大多数网页无法很好地响应(例如)默认字体大小的变化而不破坏其布局,因此浏览器通过缩放所有测量(包括像素)来实现缩放。为了保持一致,他们还缩放报告的客户端和窗口大小、鼠标位置等。对我来说,麻烦是我想要真实的(未缩放的)测量值。
- 我正在寻找 JavaScript 解决方案。
How can I get the browser window's left edge (including menu, border, caption, etc), without it being "fixed" to take into account the zoom level? (This question addresses the basic question, but does not consider zoom.).
window.screenLeft or window.screenX work fine on Chrome and Safari, but these report "fixed" values using IE6, IE8 and Firefox.
I have considered that I can get the screen's size more reliably, and perhaps determine the zoom factor using that or screen.deviceXDPI, but I am not sure how I would use that to correct the position.
(Some of you are probably wondering why I want to do this. It is because a training web site opens a browser window on the right hand side of the user's screen. The browser communicates with my application using the script tag hack. The application wants to resize itself so it fits exactly to the left of the browser window.)
EDIT
I should have mentioned two things:
- I am asking about the browser zooming that you can typically access from a View menu or by holding down Ctrl and turning your mouse wheel. Because most web pages are not well able to respond to changes in (for example) default font size without mucking up their layout, browsers implement zoom by scaling all measurements, including pixels. To keep things consistent, they also scale reported client and window size, mouse positions, etc. The trouble for me is that I want the real (unscaled) measures.
- I am looking for a JavaScript solution.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您是否看过如何在所有现代浏览器中检测页面缩放级别浏览器?
我们可以使用
window.devicePixelRatio
或建议的二分搜索方法来确定像素比率。然后我们用这个因子缩放window.screenX
和window.screenY
:我在 Firefox 48 中对此进行了测试,当更改缩放级别时,窗口位置最多改变 2 个像素。使用
window.devicePixelRatio
或二分搜索给出了基本相同的结果。我想对于图形应用程序来说,相差 2 个像素确实很烦人,但确定缩放级别似乎很混乱。Have you seen How to detect page zoom level in all modern browsers?
We can use
window.devicePixelRatio
or the binary search method suggested there to determined the pixel ratio. Then we scalewindow.screenX
andwindow.screenY
with this factor:I tested this in Firefox 48 and the window position changed with at most 2 pixels when changing the zoom level. Using
window.devicePixelRatio
or the binary search gave essentially the same results. I guess being 2 pixels off can be really annoying for graphical applications, but determining the zoom level seems to be messy.如果您正在寻找制作全屏应用程序,您是否考虑过:
CSS 中的扩展中间
看看LiveDemo对于已接受的答案。该解决方案完美地补偿了缩放造成的任何影响。
If you are looking to make a full screen application have you considered this:
An expanding middle in CSS
Have a look at the LiveDemo for the accepted answer. This solution elegantly compensates for any effects due to zooming.