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 去除数组的重复元素
May 04 Javascript
jquery 模拟类搜索框自动完成搜索提示功能(改进)
May 24 Javascript
textarea焦点的用法实现获取焦点清空失去焦点提示效果
May 19 Javascript
jquery 新建的元素事件绑定问题解决方案
Jun 12 Javascript
jquery $(document).ready()和window.onload的区别浅析
Feb 04 Javascript
深入学习js瀑布流布局
Oct 14 Javascript
d3.js中冷门却实用的内置函数总结
Feb 04 Javascript
JS 组件系列之Bootstrap Table的冻结列功能彻底解决高度问题
Jun 30 Javascript
Angular2使用vscode断点调试ts文件的方法
Dec 13 Javascript
微信小程序日历效果
Dec 29 Javascript
javascript实现鼠标点击生成文字特效
Dec 24 Javascript
vue data有值,但是页面{{}} 取不到值的解决
Nov 09 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中与数组相关的函数
2007/03/22 PHP
php && 逻辑与运算符使用说明
2010/03/04 PHP
PHP函数篇之掌握ord()与chr()函数应用
2011/12/05 PHP
php读取大文件示例分享(文件操作类)
2014/04/13 PHP
Windows和Linux中php代码调试工具Xdebug的安装与配置详解
2014/05/08 PHP
简单的php+mysql聊天室实现方法(附源码)
2016/01/05 PHP
JQuery 学习笔记 选择器之五
2009/07/23 Javascript
ExtJs 3.1 XmlTreeLoader Example Error
2010/02/09 Javascript
关于二级域名下使用一级域名下的COOKIE的问题
2011/11/07 Javascript
javascript获取form里的表单元素的示例代码
2014/02/14 Javascript
input点击后placeholder中的提示消息消失
2016/01/15 Javascript
jquery实现一个简单的表单验证实例
2016/03/30 Javascript
javascript中apply、call和bind的使用区别
2016/04/05 Javascript
JavaScript中0和""比较引发的问题
2016/05/26 Javascript
jQuery设置聚焦并使光标位置在文字最后的实现方法
2016/08/02 Javascript
ReactNative列表ListView的用法
2017/08/02 Javascript
JavaScript使用atan2来绘制箭头和曲线的实例
2017/09/14 Javascript
vue仿淘宝滑动验证码功能(样式模仿)
2019/12/10 Javascript
[04:11]DOTA2上海特级锦标赛主赛事首日TOP10
2016/03/03 DOTA
[00:32]2018DOTA2亚洲邀请赛EG出场
2018/04/03 DOTA
[47:43]Alliance vs KG 2019国际邀请赛小组赛 BO2 第一场 8.16
2019/08/18 DOTA
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
构建高效的python requests长连接池详解
2020/05/02 Python
Python的信号库Blinker用法详解
2020/12/31 Python
使用phonegap查找联系人的实现方法
2017/03/31 HTML / CSS
求职信内容考虑哪几点
2013/10/05 职场文书
秋季婚礼证婚词
2014/01/11 职场文书
爱心捐款倡议书范文
2014/05/12 职场文书
村容村貌整治方案
2014/05/21 职场文书
党员四风自我剖析材料
2014/10/07 职场文书
2015年元旦促销方案书
2014/12/09 职场文书
实习单位指导教师评语
2014/12/30 职场文书
Nginx部署vue项目和配置代理的问题解析
2021/08/04 Servers
MySQL连接控制插件介绍
2021/09/25 MySQL
mysql timestamp比较查询遇到的坑及解决
2021/11/27 MySQL
Mysql调整优化之四种分区方式以及组合分区
2022/04/13 MySQL