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 兼容鼠标滚轮事件
Apr 07 Javascript
修改jquery.lazyload.js实现页面延迟载入
Dec 22 Javascript
javascript开发随笔一 preventDefault的必要
Nov 25 Javascript
使用js实现关闭js弹出层的窗口
Feb 10 Javascript
Javascript函数式编程语言
Oct 11 Javascript
Jquery中request和request.form和request.querystring的区别
Nov 26 Javascript
基于WebUploader的文件上传js插件
Aug 19 Javascript
解决vue中修改export default中脚本报一大堆错的问题
Aug 27 Javascript
Vue使用NPM方式搭建项目
Oct 25 Javascript
Node.js API详解之 dgram模块用法实例分析
Jun 05 Javascript
JS如何生成动态列表
Sep 22 Javascript
JS封装cavans多种滤镜组件
Feb 15 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
CodeIgniter使用phpcms模板引擎
2013/11/12 PHP
理解php依赖注入和控制反转
2016/05/11 PHP
Laravel 的数据库迁移的方法
2017/07/31 PHP
Yii Framework框架开发微信公众平台示例
2020/04/26 PHP
Javascript 定时器调用传递参数的方法
2009/11/12 Javascript
JSON 教程 json入门学习笔记
2020/09/22 Javascript
jQuery之浮动窗口实现代码(两种方法)
2010/09/08 Javascript
基于jquery的滚动条滚动固定div(附演示下载)
2012/10/29 Javascript
Javascript 多浏览器兼容总结(实战经验)
2013/10/30 Javascript
jQuery ajax调用WCF服务实例
2014/07/16 Javascript
Javascript动态创建表格及删除行列的方法
2015/05/15 Javascript
javascript获取文档坐标和视口坐标
2015/05/26 Javascript
js预加载图片方法汇总
2015/06/15 Javascript
jquery实现的点击翻书效果代码
2015/11/04 Javascript
javascript下拉列表中显示树形菜单的实现方法
2015/11/17 Javascript
基于JavaScript实现随机颜色输入框
2016/12/10 Javascript
prototype与__proto__区别详细介绍
2017/01/09 Javascript
JS正则表达式判断有效数实例代码
2017/03/13 Javascript
Express+Nodejs 下的登录拦截实现代码
2017/07/01 NodeJs
微信小程序实现顶部普通选项卡效果(非swiper)
2020/06/19 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
jQuery+Ajax+js实现请求json格式数据并渲染到html页面操作示例
2020/06/02 jQuery
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
小程序实现可拖动的悬浮按钮
2020/09/07 Javascript
[01:06:19]DOTA2-DPC中国联赛定级赛 LBZS vs SAG BO3第二场 1月8日
2021/03/11 DOTA
python操作CouchDB的方法
2014/10/08 Python
Python 16进制与中文相互转换的实现方法
2018/07/09 Python
如何用python免费看美剧
2020/08/11 Python
Python 实现微信自动回复的方法
2020/09/11 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
大学生在校学习的自我评价
2014/02/18 职场文书
推广普通话标语
2014/06/27 职场文书
倡议书的写法
2014/08/30 职场文书
新郎答谢词
2015/01/04 职场文书
2019年幼儿园管理条例范本!
2019/07/17 职场文书
90行Python代码开发个人云盘应用
2021/04/20 Python