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编程起步(第四课)
Feb 27 Javascript
Javascript select控件操作大全(新增、修改、删除、选中、清空、判断存在等)
Dec 19 Javascript
js获取通过ajax返回的map型的JSONArray的方法
Jan 09 Javascript
node.js中的console.dir方法使用说明
Dec 10 Javascript
JQuery异步获取返回值中文乱码的解决方法
Jan 29 Javascript
jQuery中prepend()方法使用详解
Aug 11 Javascript
jQuery文字提示与图片提示效果实现方法
Jul 04 Javascript
Js调用Java方法并互相传参的简单实例
Aug 11 Javascript
js实现html table 行,列锁定的简单实例
Oct 13 Javascript
微信小程序 loading 详解及实例代码
Nov 09 Javascript
使用socket.io实现简单聊天室案例
Jan 02 Javascript
微信小程序自定义prompt组件步骤详解
Jun 12 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中实现生成静态文件的方法缓解服务器压力
2014/01/07 PHP
ThinkPHP采用原生query实现关联查询left join实例
2014/12/02 PHP
php给一组指定关键词添加span标签的方法
2015/03/31 PHP
PHP递归调用数组值并用其执行指定函数的方法
2015/04/01 PHP
PHP基于递归实现的约瑟夫环算法示例
2017/08/27 PHP
Javascript面向对象编程
2012/03/18 Javascript
js加强的经典分页实例
2013/03/15 Javascript
jQuery 遍历- 关于closest() 的方法介绍以及与parents()的方法区别分析
2013/04/26 Javascript
js浮点数保留两位小数点示例代码(四舍五入)
2013/12/26 Javascript
JS模式之单例模式基本用法
2015/06/30 Javascript
jQuery+PHP星级评分实现方法
2015/10/02 Javascript
JavaScript优化专题之Loading and Execution加载和运行
2016/01/20 Javascript
node.js中cluster的使用教程
2017/06/09 Javascript
JS中Safari浏览器中的Date
2017/07/17 Javascript
微信小程序左滑动显示菜单功能的实现
2018/06/14 Javascript
Vue与React的区别和优势对比
2020/12/18 Vue.js
[44:47]Ti4 循环赛第三日 iG vs NaVi
2014/07/12 DOTA
在Python3中使用asyncio库进行快速数据抓取的教程
2015/04/02 Python
Python运行报错UnicodeDecodeError的解决方法
2016/06/07 Python
python基础教程之匿名函数lambda
2017/01/17 Python
Python字符串格式化的方法(两种)
2017/09/19 Python
Python探索之SocketServer详解
2017/10/28 Python
Python封装成可带参数的EXE安装包实例
2019/08/24 Python
opencv resize图片为正方形尺寸的实现方法
2019/12/26 Python
Python批量启动多线程代码实例
2020/02/18 Python
浅谈pycharm导入pandas包遇到的问题及解决
2020/06/01 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
基于 HTML5 WebGL 实现的垃圾分类系统
2019/10/08 HTML / CSS
使用HTML5的Notification API制作web通知的教程
2015/05/08 HTML / CSS
html5+css如何实现中间大两头小的轮播效果
2018/12/06 HTML / CSS
日本高岛屋百货购物网站:TAKASHIMAYA
2019/03/24 全球购物
中科前程Java笔试题
2016/11/20 面试题
工程造价与管理专业应届生求职信
2013/11/23 职场文书
大学生社会实践自我鉴定
2014/03/24 职场文书
基层党员公开承诺书
2014/05/29 职场文书
感恩老师演讲稿400字
2014/08/28 职场文书