整理浏览器中和屏幕尺寸相关的 API:

其中和文档相关的属性,例如 innerWidth、innerHeight、event.x、event.y 的单位为 CSS 像素,如果页面存在缩放,则需乘上缩放比。

假如当前页面缩放比为 125%,那么取到的 innerWidth 和 innerHeight 值比 100% 时要小,需乘以 1.25 才是 100% 时的值。

同理,假如当前页面缩放比为 80%,那么取到的 innerWidth 和 innerHeight 值比 100% 时要大,需乘以 0.8 才是 100% 时的值。

注意,页面缩放比并非 window.devicePixelRatio 属性,该属性还包括了系统屏幕的缩放。例如高分辨率显示器通常放大一倍,这样即使页面 100% 未缩放,devicePixelRatio 初始值就是 2。

在触摸屏或触控板上使用双指缩放页面时 innerWidth 和 innerHeight 不会变,但 visualViewport 中的属性会变,其中 scale 为缩放比。


由于缺少类似 innerLeft、innerTop 属性,因此左侧面板的宽度和上方面板的高度无法直接获取,只能通过鼠标事件的 event.screenX/Y 减去窗口的 X/Y 间接获取。因此至少需触发一次 MouseMove 事件才能获取这些值。

根据这些信息,我们不仅可获取屏幕、窗口尺寸和坐标,甚至还能计算出浏览器上下左右 4 个面板的尺寸。

演示:https://etherdream.com/screen-info/

(目前只模拟了 macOS / Chrome,其他环境可能会有偏差。并且未考虑缩放比)

该演示根据当前屏幕和浏览器窗口尺寸,进行同比例还原。当你拖动、缩放浏览器窗口时,虚拟窗口会随之同步;当你调整面板(例如控制台)的尺寸时,界面也会改变。

即使你调整系统 dock 的尺寸或位置,程序也能感知到,因为改变 dock 会影响 screen.avail* 属性。当然 dock 的尺寸和图标数量有关,因此宽度(如果 dock 在下方)或高度(如果 dock 在两侧)只能猜测,而非准确。

演示页面打开后,文档部分默认不显示,必须触发 MouseMove 事件才能根据 event.screenX/Y 推测出文档部分(绿色)的坐标。

如果将左侧面板(例如停靠左侧的控制台)的宽度调小,界面不会立即同步,而必须等下次 MouseMove 事件才能同步。

如果将左侧面板的宽度调大,理论上界面也不会同步,但实际上调大的过程中鼠标往右移动,面板缩放可能跟不上鼠标移动的速度,因此很容易触发 MouseMove 事件,使得界面可以同步。

当然目前还没有考虑多显示器的情况,之后再完善。。。

标签智能推荐:

如何让shell脚本变成可执行文件

在本教程中介绍创建bash脚本并使用chmod命令使脚本可执行,无需脚本前面加上sh或bash命令就可以运行它。创建脚本文件第一步是使用以下命令创建一个扩展名为.sh的新文件:[root@localhost~]#touchhello_script.sh写一个简单的脚本使用vim编辑器打开新创建的文件,将以下bash脚本添加到文件中:[root@localhost~]#vimhello_script

Jmeter性能测试学习:三、使用Badboy录制jmx脚本

oy,录制步骤:点击录制(recordon/off)->输入测试地址,执行回车,录制完成后,再次点(recordon/off),结束录制 脚本录制完成如下图所示第三步:回放脚本点击“PlayAll”进行回归放第四步:导出jmx格式脚本点击File->Exporttojmeter,即可导出.jmx格式脚本第五步:JMeter图形页面打开Badboy的脚本同普通的JMeter脚本

HTML属性与事件的搭配使用

否进行复制、移动或链接。 事件属性值描述ondragscript元素被拖动时运行的脚本。ondragendscript在拖动操作末端运行的脚本。ondragenterscript当元素元素已被拖动到有效拖放区域时运行的脚本。ondragleavescript当元素离开有效拖放目标时运行的脚本。ondragoverscript当元素在有效拖放目标上正在被拖动时运行的脚本。ondragsta

shell脚本并发执行

简单的并发脚本#!/bin/bash#并发数count=2for((i=0;i<${count};i++))do{commands1}&done#等待循环结束再执行wait后面的内容waitcommands2#显示脚本执行耗时echo-e"time-consuming:$SECONDSseconds"如果shell不能执行,或者报格式错误,记得用yuminstalldos2unixd

软件测试体系学习及构建(10)-HTML之脚本、字符实体

目录1脚本1.1脚本标签1.2script标签1.3noscript标签2字符实体注意:本位仅简单说明和学习,后续会对JavaScript进行深入学习。1脚本1.1脚本标签标签说明<script>定义客户端脚本<noscript>定义不支持脚本浏览器输出的文本1.2script标签<script>标签用于定义客户端脚本,如JavaScript;<scrip

重启php-fpm的方法

ps-ef|grep"php-fpm:masterprocess"|grep-vgrep|awk'{print$2}'|xargskill-USR2 优点:   简单,无需写脚本。无需依赖其他工具 缺点:   不能区分池子,不够精准

树莓派 - 树莓派开机自启动

树莓派系统下简单的设置开机自启动程序:在要运行的程序的同级目录下新建一个脚本start.shsudonanostart.sh​脚本如下:#!/bin/shcd/home/pi/Desktop/timersudo./timer修改脚本文件权限sudochmod777/hone/pi/Desktop/timer/start.sh将脚本文件添加进rc.local中sudonano/etc/rc.loca

Powershell ExecutionPolicy 执行策略

简单说明:powershell对于脚本的执行有着严格的安全限制Get-ExecutionPolicy-List#查看当前的执行策略Set-ExecutionPolicy-ScopeCurrentUserRemoteSigned#设置执行策略为要求远程脚本签名,范围为当前用户策略Policies:Restricted/AllSigned/RemoteSigned/Unrestricted/Bypas

Shell中的$0、$1、$2的含义

bsp;$0、$1、$2这样的符号,这是什么意思呢?简单来说 $0 就是你写的shell脚本本身的名字,$1 是你给你写的shell脚本传的第一个参数,$2 是你给你写的shell脚本传的第二个参数比如你新建了一个shell脚本Test.sh,内容如下#!/bin/shecho"shell脚本本身的名字:$0"echo"传给shell的第一个参数:$1"ec

Java执行groovy脚本的两种方式

记录Java执行groovy脚本的两种方式,简单粗暴:一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容;一种是执行groovy脚本;二者都通过Invocable来传递参数并获取执行结果;Invocable:脚本引擎的解释器接口,提供invokeFunction和invokeMethod两种传递参数并获取执行结果的方法,JavaJDKAPI文档解释如下:inv