javascript检测网页缩放演示代码

news/2025/2/14 6:16:02/

一、为什么会提示浏览器显示比例不正常?


在网上冲浪,有时在打某个网站时,会提示你的浏览器显示比例不是100%,建议你将浏览器显示比例恢复为100%,以便获得最佳显示效果。

二、检测网页缩放比例的方法


那么这些网站是如何检测你的浏览器显示比例的呢?

(一)window.devicePixelRatio


一般可以使用window.devicePixelRatio来检测。 window.devicePixelRatio当前显示设备的物理像素分辨率与 CSS 像素分辨率的比率,当其值为1时缩放率就是100%,如果其值小于1表示当前网页缩小显示了,如果其值天大于1表示当前网页放大显示了。所以利用该属性可以用于检测网页是否被缩放了。

(二)window.outerWidth/window.innerWidth

如果当前使用的浏览器不支持window.devicePixelRatio,那么我们可以使用window.outerWidth/window.innerWidth来测算,其中:window.outerWidth的值为浏览器窗口的外部宽度,包括所有界面元素(如工具栏/滚动条),而window.innerWidth的值为窗口内容区域的宽度,包括垂直滚动条(如果呈现的话)。

(三)screen.deviceXDPI/screen.logicalXDPI

对于IE浏览器来说,还可以使用screen.deviceXDPI/screen.logicalXDPI来测算。其中screen.deviceXDPI代表显示屏幕的每英寸实际水平点数,screen.logicalXDPI代表显示屏幕每英寸水平常规点数。

综上,我们可以编写一个函数来返回当前网页显示比例:

//功  能:取当前网页显示比例
//返回值:当前网页显示比例,若未能获取有关数据,将返回0
//更  新:20230914创建
function getScrRatio()
{//(window.devicePixelRatio:当前显示设备的物理像素分辨率与 CSS 像素分辨率的比率if(window.devicePixelRatio !== undefined){return window.devicePixelRatio;    }//window.outerWidth:浏览器窗口的外部宽度,包括所有界面元素(如工具栏/滚动条)//window.innerWidth:窗口内容区域的宽度,包括垂直滚动条(如果呈现的话)if(window.outerWidth !== undefined && window.innerWidth !== undefined){return window.outerWidth/window.innerWidth;}if(~navigator.userAgent.toLowerCase().indexOf('msie')){//(IE提供)screen.deviceXDPI:显示屏幕的每英寸实际水平点数//(IE提供)screen.logicalXDPI:显示屏幕每英寸水平常规点数if(screen.deviceXDPI && screen.logicalXDPI){return screen.deviceXDPI/screen.logicalXDPI;        }}return 0;
} //getScrRatio()


三、演示代码


我们在网页上放“显示数据”和“停止显示”两个按钮。其中“停止显示”按钮初始为禁用状态。

当我们点击“显示数据”按钮,就定时采集和显示window.devicePixelRatio、window.outerWidth、window.innerWidth、screen.deviceXDPI/screen.logicalXDPI的值,并将“停止显示”按钮改为可用状态。

当我们点击“停止显示”按钮,就停止更新数据,并将“停止显示”按钮恢复为禁用状态。

<!DOCTYPE html>
<html><head><meta charset="UTF-8"><meta name="Generator" content="EditPlus®"><meta name="Author" content="PurpleEndurer"><meta name="Keywords" content="屏幕缩放比"><meta name="Description" content="屏幕缩放"><title>屏幕缩放比</title></head><body><button onclick="showDataTiming()">显示数据</button>  <button id="btnStopShow" onclick="stopShow()">停止显示</button><p>浏览器类型:
<script>document.write(navigator.userAgent);
</script></p><p>devicePixelRatio:<span id="spanDevPR"></span></p><p>window.outerWidth:<span id="spanWinOW"></span>  window.innerWidth:<span id="spanWinIW"></span></p><p>window.screen.deviceXDPI:<span id="spanDevXDPI"></span>  window.screen.logicalXDPI:<span id="spanlogXDPI"></span></p><p>屏幕缩放比:<span id="spanScrRadio"></span><p>
<script type="text/javascript">
var btnStopShow = document.getElementById("btnStopShow");
btnStopShow.disabled=true;
var spanDevPR = document.getElementById("spanDevPR");
var spanWinOW = document.getElementById("spanWinOW");
var spanWinIW = document.getElementById("spanWinIW");
var spanDevXDPI = document.getElementById("spanDevXDPI");
var spanlogXDPI = document.getElementById("spanlogXDPI");
var spanScrRadio =  document.getElementById("spanScrRadio");
var t = 0;//定时器//功  能:取当前网页显示比例
//返回值:当前网页显示比例,若未能获取有关数据,将返回0
//更  新:20230914创建
function getScrRatio()
{//(window.devicePixelRatio:当前显示设备的物理像素分辨率与 CSS 像素分辨率的比率if(window.devicePixelRatio !== undefined){return window.devicePixelRatio;    }//window.outerWidth:浏览器窗口的外部宽度,包括所有界面元素(如工具栏/滚动条)//window.innerWidth:窗口内容区域的宽度,包括垂直滚动条(如果呈现的话)if(window.outerWidth !== undefined && window.innerWidth !== undefined){return window.outerWidth/window.innerWidth;}if(~navigator.userAgent.toLowerCase().indexOf('msie')){//(IE提供)screen.deviceXDPI:显示屏幕的每英寸实际水平点数//(IE提供)screen.logicalXDPI:显示屏幕每英寸水平常规点数if(screen.deviceXDPI && screen.logicalXDPI){return screen.deviceXDPI/screen.logicalXDPI;        }}return 0;
} //getScrRatio()function showData()
{if(undefined != window.devicePixelRatio){spanDevPR.innerText = window.devicePixelRatio;    }if (undefined != window.outerWidth){spanWinOW.innerText = window.outerWidth;}if (undefined != window.innerWidth){spanWinIW.innerText = window.innerWidth;}if (undefined != screen.deviceXDPI){spanDevXDPI.innerText = screen.deviceXDPI;}if (undefined != screen.logicalXDPI){spanlogXDPI.innerText = screen.logicalXDPI;}var scrRatio = getScrRatio();if (scrRatio){spanScrRadio.innerText = Math.round(scrRatio*100); }
}//showData()function showDataTiming()
{t = self.setInterval("showData()",500);btnStopShow.disabled = false;
}//showDataTiming()function stopShow()
{t = window.clearInterval(t);btnStopShow.disabled = true;
}//stopShow()</script></body>
</html>

四、代码运行效果



http://www.ppmy.cn/news/1111540.html

相关文章

Redis - 超越缓存的多面手

文章目录 Redis 使用场景图解 Redis 使用场景 Redis可以在各种场景中使用 &#x1f539;会话 我们可以使用Redis在不同服务之间共享用户会话数据。 &#x1f539;缓存 我们可以使用Redis缓存对象或页面&#xff0c;特别是对于热点数据。 &#x1f539;分布式锁 我们可以使用…

如何诊断Linux系统中的性能问题

一、CPU CPU性能问题通常会导致系统运行缓慢或服务不可用。要诊断CPU性能问题,可以采取以下步骤: 使用top命令检查CPU使用率。如果CPU使用率过高,需要找出哪些进程占用了大量的CPU资源。使用sar命令定期检查CPU活动。sar命令可以收集系统性能数据,并显示CPU使用率和其他系…

dvwa命令执行漏洞分析

dvwa靶场命令执⾏漏洞 high难度的源码&#xff1a; $target trim($_REQUEST[ ‘ip’ ]);是一个接收id值的变量 array_keys()函数功能是返回包含原数组中所有键名的一个新数组。 str_replace() 函数如下&#xff0c;把字符串 “Hello world!” 中的字符 “world” 替换为 “S…

笔试面试相关记录(3)

&#xff08;1&#xff09;String String和String.append()的底层实现 C中string append函数的使用与字符串拼接「建议收藏」-腾讯云开发者社区-腾讯云 (tencent.com) String String 在 第二个String中遇到\0就截止&#xff0c;append()的方法则是所有字符都会加在后面。 &…

vue-h5移动Web的Flex布局

Flex布局 Flexible布局&#xff0c;也就是弹性布局。 Flexible的优点是&#xff0c;不需要对元素设置固定的宽度和高度&#xff0c;元素的位置和大小也会跟着父元素或者浏览器的状态来自动适配。 同时还添加了水平居中和垂直居中的解决方案。 在页面中指定一个元素作为Flex布…

clickhouse在执行alter table update delete等命令后数据没有更新

clickhouse之删除数据或更新数据无效的解决思路 例如&#xff1a; ALTER TABLE 表名 DELETE WHERE 条件 ALTER TABLE 表名 UPDATE column1 expr1 [, ...] WHERE filter_expr分析原因&#xff1a; 我们都知道ClickHouse内核中的MergeTree存储一旦生成一个Data Part&#xff0…

opencv c++实现鼠标框选区域并显示选择的图片区域

OpenCV可以使用setMouseCallback设置鼠标事件的回调函数,从而然后根据需要进行处理。 setMouseCallback原型为: void cv::setMouseCallback(const cv::String& windowName, MouseCallback onMouse, void* userData = 0); 其中,参数说明如下:windowName:窗口名称 onMo…

Vue.js的服务器端渲染(SSR):为什么和如何

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…