javascript检测网页缩放演示代码

简介: javascript检测网页缩放演示代码

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

在网上冲浪,有时在打某个网站时,会提示你的浏览器显示比例不是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>

四、代码运行效果  

  image.png image.png

相关文章
|
JavaScript 前端开发 Python
vue简单实现词云图组件
JavaScript也有许多可以用来生成词云图的库,但我自己其实都没有使用过,之前使用python的时候倒是用过python的wordcloud库,wordcloud库配合jieba库就可以很好的满足词频统计的需求,但在JavaScript这边我还没有了解很多词频统计这块的相关知识,在网上搜索了一番好像都没有搜索到有有关词频统计的相关库,而在词云生成这一方面的相关库倒是发现有不少,如:js2wordcloud、wordcloud2 等等……这些库都很好地实现了词云图片的展示,现在我也尝试着简单封装一个自己使用的简洁版词云图
913 0
vue简单实现词云图组件
webpack——打包去除console
webpack——打包去除console
169 0
|
10月前
|
存储 人工智能 程序员
阿里云基础设施技术分享之走进浙大活动圆满结束
2024年12月13日,阿里云技术专家走进浙江大学,举办了一场关于AI与云计算的前沿技术宣讲活动。作为浙江大学计算机学院“人工智能+”创新创业大讲堂的第十五期,活动吸引了大量师生参与。四位专家分别就AI编程、超智融合、云计算网络及应用部署进行了深入分享,激发了师生对未来科技发展的无限憧憬。
|
12月前
|
编解码 数据可视化
基于transform的scale属性,实现数据可视化大屏自适应缩放,保持比例不变,轻松应对不同分辨率
基于transform的scale属性,实现数据可视化大屏自适应缩放,保持比例不变,轻松应对不同分辨率
898 0
|
12月前
|
前端开发
Svelte 中的事件处理机制
【10月更文挑战第4天】
150 0
|
存储 安全 数据安全/隐私保护
恶意软件 (Malware)
【8月更文挑战第17天】
499 2
|
前端开发 JavaScript
【前端用法】前端JS获取视频时长的写法
【前端用法】前端JS获取视频时长的写法
355 0
|
运维 监控 Kubernetes
中间件故障转移自动切换
【7月更文挑战第25天】
225 2
|
前端开发
学习css的clip-path属性
【7月更文挑战第1天】了解CSS `clip-path`属性,用于定义元素显示区域的裁剪形状,如圆形、椭圆、多边形、矩形及SVG路径。通过配合过渡和动画,可创建动态交互效果。例如,`clip-path: circle(radius at center);`用于创建圆形裁剪,`polygon`用于自定义多边形。还可以使用`path()`引用SVG路径数据。[资源推荐:bennettfeely.com/clippy/](https://bennettfeely.com/clippy/),提供交互式工具测试不同形状。
405 0
学习css的clip-path属性
|
JavaScript BI
技术笔记:JS获取子节点、父节点和兄弟节点的方法实例总结
技术笔记:JS获取子节点、父节点和兄弟节点的方法实例总结
382 0