javascript检测浏览器的缩放状态实现代码


Posted in Javascript onSeptember 28, 2014

这里所说的缩放不是指浏览器大小的缩放,而是指浏览器网页内容的百分比缩放(按Ctrl和+号键或者-号键的缩放)。
检测这种缩放有很种方法,QQ空间都通过flash来检测浏览器是否处于缩放。这里提供javascript的方法来检测浏览器的缩放。
对于 IE6,就直接无视了,因为 IE6 只能对文本进行缩放。
先来说说浏览器提供的标准检测接口,window.devicePixelRatio 是设备上物理像素和设备独立像素的比例,该属性就可以用于检测网页是否被缩放了。在普通的 PC 浏览器上,在默认无缩放的情况下其默认值是 1。目前Firefox、chrome等都得到了很好的支持。
好吧,接下来该说说 IE 的处理方法了。IE 提供了 window.screen.deviceXDPI 和 window.screen.logicalXDPI 两个属性,deviceXDPI 就是对应的设备上的物理像素,而 logicalXDPI 就是对应了设备独立像素的比例。估计标准的检测接口也只是基于 IE 这种方法的一种改进。这两个属性在 windows XP+ 以上的系统上的默认值都是 96,因为系统默认的就是 96dpi 。
对于以上两种都不支持的浏览器,还可以利用window.outerWidth 和 window.innerWidth 这两个属性。outerWidth 返回的是窗口元素的外部实际宽度,innerWidth 返回的是窗口元素的内部实际宽度,这两个宽度都包含了滚动条在内的宽度。
有了这些属性基本就可以搞定 PC 浏览器上常见的浏览器了。实现代码如下:

detectZoom 函数的返回值如果是 100 就是默认缩放级别,大于 100 则是放大了,小于 100 则是缩小了。

function detectZoom (){ 
  var ratio = 0,
    screen = window.screen,
    ua = navigator.userAgent.toLowerCase();

   if (window.devicePixelRatio !== undefined) {
      ratio = window.devicePixelRatio;
  }
  else if (~ua.indexOf('msie')) {  
    if (screen.deviceXDPI && screen.logicalXDPI) {
      ratio = screen.deviceXDPI / screen.logicalXDPI;
    }
  }
  else if (window.outerWidth !== undefined && window.innerWidth !== undefined) {
    ratio = window.outerWidth / window.innerWidth;
  }
  
   if (ratio){
    ratio = Math.round(ratio * 100);
  }
  
   return ratio;
};

原创文章,转载请注明: 转载自前端开发

Javascript 相关文章推荐
根据地区不同显示时间的javascript代码
Aug 13 Javascript
JavaScript调用Activex控件的事件的实现方法
Apr 11 Javascript
JS跨域代码片段
Aug 30 Javascript
js实现数组去重、判断数组以及对象中的内容是否相同
Nov 29 Javascript
extJS中常用的4种Ajax异步提交方式
Mar 07 Javascript
由ReactJS的Hello world说开来
Jul 02 Javascript
jquery实现手风琴效果
Nov 20 Javascript
AngularJS使用ng-Cloak阻止初始化闪烁问题的方法
Nov 03 Javascript
详解关于vue-area-linkage走过的坑
Jun 27 Javascript
详解webpack引入第三方库的方式以及注意事项
Jan 15 Javascript
Vue双向数据绑定(MVVM)的原理
Oct 03 Javascript
ant-design-vue中tree增删改的操作方法
Nov 03 Javascript
Node.js中使用mongoskin操作mongoDB实例
Sep 28 #Javascript
js使用for循环与innerHTML获取选中tr下td值
Sep 26 #Javascript
IE6-IE9中tbody的innerHTML不能赋值的解决方法
Sep 26 #Javascript
简单方法判断JavaScript对象为null或者属性为空
Sep 26 #Javascript
jquery uploadify 在FF下无效的解决办法
Sep 26 #Javascript
jQuery判断当前点击的是第几个li的代码
Sep 26 #Javascript
javascript 自定义回调函数示例代码
Sep 26 #Javascript
You might like
php读取文件内容的几种方法详解
2013/06/26 PHP
PHP判断指定时间段的2个方法
2014/03/14 PHP
PHP+mysql防止SQL注入的方法小结
2019/04/27 PHP
php中用unset销毁变量并释放内存
2020/05/10 PHP
url 特殊字符 传递参数解决方法
2010/01/01 Javascript
setTimeout和setInterval的深入理解
2013/11/08 Javascript
js验证输入是否为手机号码或电话号码示例
2013/12/30 Javascript
javaScript中两个等于号和三个等于号之间的区别介绍
2014/06/27 Javascript
Javascript中使用parseInt函数需要注意的问题
2015/04/02 Javascript
jQuery height()、innerHeight()、outerHeight()函数的区别详解
2016/05/23 Javascript
webstorm中配置Eslint的两种方式及差异比较详解
2018/10/19 Javascript
vue全局使用axios的方法实例详解
2018/11/22 Javascript
通过JavaScript下载文件到本地的方法(单文件)
2019/03/17 Javascript
vue 中 beforeRouteEnter 死循环的问题
2019/04/23 Javascript
JS常用正则表达式超全集(密码强度校验,金额校验,IE版本,IPv4,IPv6校验)
2020/02/03 Javascript
微信小程序利用for循环解决内容变更问题
2020/03/05 Javascript
JS常用跨域方法实现原理解析
2020/12/09 Javascript
Python的Flask开发框架简单上手笔记
2015/11/16 Python
Python基于QRCode实现生成二维码的方法【下载,安装,调用等】
2017/07/11 Python
Python+selenium实现截图图片并保存截取的图片
2018/01/05 Python
Python如何获得百度统计API的数据并发送邮件示例代码
2019/01/27 Python
Python Django基础二之URL路由系统
2019/07/18 Python
pytorch中nn.Conv1d的用法详解
2019/12/31 Python
python模拟斗地主发牌
2020/04/22 Python
在pycharm创建scrapy项目的实现步骤
2020/12/01 Python
数以千计的折扣工业产品:ESE Direct
2018/05/20 全球购物
意大利时尚精品店:Nugnes 1920
2020/02/10 全球购物
C#笔试题和英文面试题
2013/02/07 面试题
监察建议书格式
2014/05/19 职场文书
同学聚会通知书
2015/04/20 职场文书
秋收起义观后感
2015/06/11 职场文书
2015年音乐教学工作总结
2015/07/22 职场文书
2015年七夕情人节感言
2015/08/03 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
纯CSS如何禁止用户复制网页的内容
2021/11/01 HTML / CSS
python 远程执行命令的详细代码
2022/02/15 Python