javascript检测网页缩放演示代码

news2024/9/21 22:47:39

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


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【MATLAB第75期】#源码分享 | 基于MATLAB的不规则间隔数据插值实现时间序列数据扩充(更新中)

【MATLAB第75期】#源码分享 | 基于MATLAB的不规则间隔数据插值实现时间序列数据扩充 代码 %% 清空环境变量 warning off % 关闭报警信息 close all % 关闭开启的图窗 clear % 清空变量 clc % 清空命令行%%…

《数据结构、算法与应用C++语言描述》使用C++语言实现二维数组三对角矩阵

《数据结构、算法与应用C语言描述》使用C语言实现二维数组三对角矩阵 三对角矩阵定义 如下图所示&#xff1a; 代码实现 _10tridiagonalMatrix.h 模板类 /* Project name : allAlgorithmsTest Last modified Date: 2022年8月13日17点38分 Last Version: V1.0 Descr…

栈与队列经典题目——用队列实现栈

本篇文章讲解栈和队列这一部分知识点的经典题目&#xff1a;用栈实现队列、用队列实现栈。对应的题号分别为&#xff1a;Leetcode.225——用队列实现栈&#xff0c;。 在对两个题目进行解释之前&#xff0c;先回顾以下栈和队列的特点与不同&#xff1a; 栈是一种特殊的线性表…

Linux四种I/O模型

一.四种模型 阻塞式IO&#xff0c;非阻塞式IO&#xff0c;信号驱动IO&#xff0c;IO多路复用 二.阻塞式IO 特点&#xff1a;最简单&#xff0c;最常用&#xff0c;效率低 阻塞I/O 模式是最普遍使用的I/O 模式 系统默认状态&#xff0c;套接字建立后所处于的模式就是阻塞I/O 模式…

C语言 模拟计算器 版本更迭

简单版 ​ //模拟计算器&#xff1a; void menu() {printf("*****************************************\n");printf("************ 1.add 2.sub ***********\n");printf("************ 3.mul 4.div ***********\n");printf("**…

vscode 当中vue 全局自定义组件没有提示以及一些技巧

阅读技术文章可以查漏补缺&#xff0c;借鉴别人编码方式提高代码水平 阅读优秀项目 可以扩展业务处理能力 坚持每天阅读&#xff0c;每天学习新东西 积少成多&#xff0c;水到渠成 在写项目时候&#xff0c;我全局注册了组件&#xff0c;YhSwitch&#xff0c;但是在使用时候&am…

dart包的创建

浅讲dart包(Packages)的创建 创建 package 在 Dart 生态系统中使用 packages 实现共享软件&#xff0c;比如一些库和工具。本章将通过最常见的 Package 来介绍如何创建一个 Package。 若要为 package 创建一个初始化的目录和结构&#xff0c;使用 dart create 命令&#xff…

MySQL数据库技术笔记(2)

对于数据库表中列的增加的命令 : alter table 表名 add 列名 数据类型 [first|after 指定的列名 ] ; 例如 : 在 student 表中增加一列家庭地址&#xff0c;排列在手机号这一列的后面。 alter table student add address varchar(100) after phone; 调整数据库表中列的顺序…

王道数据结构C语言循环链表基本操作实现

文章目录 一、循环单链表1.1初始化及判空操作1.2判断是否是尾结点 二、循环双链表2.1初始化2.2判空2.3判断尾结点2.4循环双链表的删除 一、循环单链表 1.1初始化及判空操作 其实循环链表就是在单链表&#xff08;双链表&#xff09;上做一点小小的优化 它是把尾结点的next指…

广西建筑模板施工中的常见问题及解决方法

广西建筑模板施工中的常见问题及解决方法在广西建筑模板的施工过程中&#xff0c;可能会出现一些常见的质量问题。以下是常见问题及其解决方法&#xff0c;以帮助您更好地处理这些问题。 1. 透胶问题&#xff1a;透胶是指模板中出现胶水渗透的现象。可能的原因包括单板质量差、…

设备树的理解与运用

设备树&#xff1a; 本质是一个文件&#xff0c;包含很多节点&#xff0c;每个节点里边是对设备属性的描述&#xff08;包括GPIO&#xff0c;时钟&#xff0c;中断等等&#xff09;,其中节点&#xff08;node&#xff09;和属性&#xff08;property&#xff09;就是设备树最重…

mysql数据库数据如何迁移目录

目录 1.关闭正在运行mysql2.找到本机my.ini 文件3.观察目录结构4.复制注意是复制Data文件夹到目的地5.找到my.ini初始位置修改数据路径并保存6.启动mysql7.关注my.ini 常用配置 1.关闭正在运行mysql 2.找到本机my.ini 文件 默认位置 C:\ProgramData\MySQL\MySQL Server 8.0 …

如果你是独立开发者,你是先写前端还是先写后端?

当我们站在独立开发的路口时&#xff0c;一个重要的抉择就摆在了我们面前&#xff1a;是先着手前端开发还是后端开发&#xff1f;这看似简单的问题&#xff0c;却蕴含着许多深刻的考虑和决策。无论你是准备构建一个复杂的分布式系统还是一个引人入胜的用户界面&#xff0c;接下…

LeetCode每日一题:1462. 课程表 IV(2023.9.12 C++)

目录 1462. 课程表 IV 题目描述&#xff1a; 实现代码与解析&#xff1a; 拓扑排序 原理思路&#xff1a; 1462. 课程表 IV 题目描述&#xff1a; 你总共需要上 numCourses 门课&#xff0c;课程编号依次为 0 到 numCourses-1 。你会得到一个数组 prerequisite &#xff…

分布式文件系统对比与选型参考

目录 一、分布式文件系统 1、 数据的存储方式&#xff1a; 2、 数据的读取速率 3、 数据的安全机制 二、主流分布式文件系统介绍 1. GFS&#xff08;Google File System&#xff09; 2. HDFS&#xff08;Hadoop Distributed File System&#xff09; 3. Ceph …

java在mysql中查询内容无法塞入实体类中,报错 all elements are null

目录 一、问题描述二、解决方案 一、问题描述 java项目中整体配置了mysql的驼峰式字段匹配规则。 mybatis.configuration.map-underscore-to-camel-casetrue由于项目需求&#xff0c;需要返回字段为file_id&#xff0c;file_url&#xff0c;并且放入实体类中&#xff0c;实体…

对话大模型中的情感支持及商业化落地

在1982年经典科幻电影《银翼杀手》中&#xff0c;仿生人瑞秋因为被植入记忆而以为自己是真人&#xff0c;当被告知自己是仿生人时&#xff0c;她拒绝相信&#xff0c;流下了眼泪。如今&#xff0c;随着AI领域对话大模型技术的发展&#xff0c;“比人更像真人”的人工智能正从梦…

vue实现左右伸缩(el-drawer自定义位置展开收缩)

内容左右收缩展开 实现需求实现效果自定义抽屉(el-drawer)展开位置实现原理 js方法&#xff0c;点击的时候抽屉伸缩展开&#xff0c;并且给左侧右侧内容对应的宽度第二种方法 实现需求 页面内容是左右布局&#xff0c;需求想让左侧内容可收缩&#xff0c;然后展示完全右侧内容。…

模拟经营类游戏是怎么开发的?

模拟经营类游戏开发是一个充满挑战但也充满乐趣的领域。下面是一些步骤和关键考虑因素&#xff0c;可以帮助您开始开发自己的模拟经营游戏&#xff1a; 明确游戏概念&#xff1a; 确定游戏开发的主题和类型&#xff0c;例如城市建设、农场经营、餐厅经营等。 制定一个引人入胜…

《论文阅读》通过动态融入常识知识来提高同理心对话的生成

《论文阅读》通过动态融入常识知识来提高同理心对话的生成 前言简介模型架构Contextual ProbingContextual Unification Workspace代码实现Knowledge-Aware Decoder实验结果前言 你是否也对于理解论文存在困惑? 你是否也像我之前搜索论文解读,得到只是中文翻译的解读后感到…