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 相关文章推荐
分享一个自定义的console类 让你不再纠结JS中的调试代码的兼容
Apr 20 Javascript
基于jquery的网站幻灯片切换效果焦点图代码
Sep 15 Javascript
JavaScript设计模式经典之命令模式
Feb 24 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
Nov 18 Javascript
基于JQuery及AJAX实现名人名言随机生成器
Feb 10 Javascript
详解如何使用webpack打包Vue工程
May 27 Javascript
vue引入ueditor及node后台配置详解
Jan 03 Javascript
原生js调用json方法总结
Feb 22 Javascript
详解js模板引擎art template数组渲染的方法
Oct 09 Javascript
elementUI 设置input的只读或禁用的方法
Oct 30 Javascript
使用Ajax实现无刷新上传文件
Apr 12 Javascript
vue使用localStorage持久性存储实现评论列表
Apr 14 Vue.js
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的控制语句
2006/10/09 PHP
php实现将Session写入数据库
2015/07/26 PHP
PHP简单检测网址是否能够正常打开的方法
2016/09/04 PHP
解决laravel 表单提交-POST 异常的问题
2019/10/15 PHP
网页右键ie不支持event.preventDefault和event.returnValue (需要加window)
2013/02/22 Javascript
js 获取(接收)地址栏参数值的方法
2013/04/01 Javascript
使用js如何实现全选与全不选
2013/12/30 Javascript
JavaScript实现Iterator模式实例分析
2015/06/09 Javascript
jQuery插件animateSlide制作多点滑动幻灯片
2015/06/11 Javascript
基于jquery实现select选择框内容左右移动添加删除代码分享
2015/08/25 Javascript
js编写一个简单的产品放大效果代码
2016/06/27 Javascript
利用jquery实现瀑布流3种案例
2016/09/18 Javascript
react.js 翻页插件实例代码
2017/01/19 Javascript
vue2中使用less简易教程
2018/03/27 Javascript
微信头像地址失效踩坑记附带解决方案
2019/09/23 Javascript
jQuery实现图片随机切换、抽奖功能(实例代码)
2019/10/23 jQuery
vue实现用户长时间不操作自动退出登录功能的实现代码
2020/07/23 Javascript
vue监听dom大小改变案例
2020/07/29 Javascript
[01:01]青春无憾,一战成名——DOTA2全国高校联赛开启
2018/02/25 DOTA
django批量导入xml数据
2016/10/16 Python
python cx_Oracle模块的安装和使用详细介绍
2017/02/13 Python
Python类的继承、多态及获取对象信息操作详解
2019/02/28 Python
Python 处理文件的几种方式
2019/08/23 Python
使用python接受tgam的脑波数据实例
2020/04/09 Python
Python定时任务框架APScheduler原理及常用代码
2020/10/05 Python
奥斯汀独木舟和皮划艇:Austin Canoe & Kayak
2018/05/22 全球购物
法国女性内衣购物网站:Glamuse
2019/05/13 全球购物
Ramy Brook官网:美国现代女装品牌
2019/06/18 全球购物
日本热销NO.1胶原蛋白冻:Aishitoto爱希特多
2019/06/20 全球购物
给全校老师的建议书
2014/03/13 职场文书
送温暖献爱心活动总结
2014/07/08 职场文书
2014年行政执法工作总结
2014/12/11 职场文书
比赛主持人开场白
2015/05/29 职场文书
2015年暑期实践报告范文
2015/07/13 职场文书
《岳阳楼记》原文、译文赏析
2019/09/10 职场文书
python超详细实现完整学生成绩管理系统
2022/03/17 Python