javascript浏览器缩放的检测实现方法

很多 WEB 开发者可能都会碰到这种头痛的问题,就是当用户对页面进行缩小或放大时,原本好好的布局就被破坏了。如果让网页支持自适应的缩小和放大布局,对于开发者来说是一个不小的挑战。

在我看来如果用户有意识的去对网页进行缩放,那么就应该知道缩放会破坏布局。还有很多用户其实压根不知道自己是何时对网页进行了缩放,此时就需要提醒用户应该将浏览器的缩放级别重置成默认的比例。

说到浏览器的缩放检测,可能有好几种方法都可以实现,从检测 CSS 样式到检测 Flash 的尺寸,可以说是各显神通,但我都觉得有点麻烦。其实还有更简便的方法的,当然各个浏览器的检测方法又有不同,对于 IE6,就直接无视了,因为 IE6 只能对文本进行缩放。

先来说说浏览器提供的标准检测接口,window.devicePixelRatio 是设备上物理像素和设备独立像素的比例,该属性就可以用于检测网页是否被缩放了。在普通的 PC 浏览器上,在默认无缩放的情况下其默认值是 1。可惜这么方便的属性目前只有 Firefox 支持。

好吧,接下来该说说 IE 的处理方法了。IE 提供了 window.screen.deviceXDPI 和 window.screen.logicalXDPI 两个属性,deviceXDPI 就是对应的设备上的物理像素,而 logicalXDPI 就是对应了设备独立像素的比例。估计标准的检测接口也只是基于 IE 这种方法的一种改进。这两个属性在 windows XP+ 以上的系统上的默认值都是 96,因为系统默认的就是 96dpi 。

对于 webkit 和 opera,它们都支持 window.outerWidth 和 window.innerWidth 这两个属性。outerWidth 返回的是窗口元素的外部实际宽度,innerWidth 返回的是窗口元素的内部实际宽度,这两个宽度都包含了滚动条在内的宽度。

有了这些属性基本就可以搞定 PC 浏览器上常见的浏览器了。实现代码如下:

 代码如下 复制代码

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

    if( ~ua.indexOf('firefox') ){
        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 );
    }
   
    // 360安全浏览器下浏览器最大化时诡异的outerWidth和innerWidth不相等
    if( ratio === 99 || ratio === 101 ){
        ratio = 100;
    }
   
    return ratio;
};

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

时间: 2024-11-16 00:52:19

javascript浏览器缩放的检测实现方法的相关文章

javascript浏览器窗口之间传递数据的方法

这篇文章主要介绍了javascript浏览器窗口之间传递数据的方法,实例分析了父窗口与子窗口之间传递参数的使用技巧,非常具有实用价值,需要的朋友可以参考下     本文实例讲述了javascript浏览器窗口之间传递数据的方法.分享给大家供大家参考.具体分析如下: 摘要: 在项目开发中我们经常会遇到弹窗,有的是通过div模拟弹窗效果,有的是通过iframe,也有通过window自带的open函数打开一个新的窗口.今天给大家分享的是最后一种通过window.open()函数打开页面进行数据交互.首

javascript获取浏览器类型和版本的方法

 这篇文章主要介绍了javascript获取浏览器类型和版本的方法(js获取浏览器版本),需要的朋友可以参考下    代码如下: function getExplorerInfo() {  var explorer = window.navigator.userAgent.toLowerCase() ;  //ie   if (explorer.indexOf("msie") >= 0) {     var ver=explorer.match(/msie ([d.]+)/)[1

javascript浏览器窗口之间传递数据的方法_javascript技巧

本文实例讲述了javascript浏览器窗口之间传递数据的方法.分享给大家供大家参考.具体分析如下: 摘要: 在项目开发中我们经常会遇到弹窗,有的是通过div模拟弹窗效果,有的是通过iframe,也有通过window自带的open函数打开一个新的窗口.今天给大家分享的是最后一种通过window.open()函数打开页面进行数据交互.首先看下效果图: 原理: 父窗口给子窗口传递数据是通过url的参数传递过去,子窗口给父窗口传递数据是通过父窗口的全局函数传递. 代码:index.html如下: 复制

借助JavaScript脚本判断浏览器Flash Player信息的方法_javascript技巧

今天研究了点Flex技术,做了一个小的Demo,在测试时发现经常报错,网上一查发现是浏览器Flash Player版本较低造成(需要10及其以上的版本)的,对此总结了一下借助JavaScript脚本判断浏览器Flash Player信息的方法: <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>JavaScript判断浏

js 检测浏览器对样式的支持方法

js 检测浏览器对样式的支持方法 var getstyleproperty = (function(){          var prefixes = ['', '-ms-','-moz-', '-webkit-', '-khtml-', '-o-'];          var reg_cap = /-([a-z])/g;          function getstyleproperty(css教程, el) {            el = el || document.docume

JavaScript学习笔记之检测客户端类型是(引擎、浏览器、平台、操作系统、移动设备)_javascript技巧

//取得用户代理字符串 并全部小写. var ua = navigator.userAgent.toLowerCase(); document.write(ua); 在上篇文章给大家介绍了基于javascript代码检测访问网页的浏览器呈现引擎.平台.Windows操作系统.移动设备和游戏系统 ,感兴趣的朋友可以点击全文了解详情. 1.识别呈现引擎 引擎主要包含四种:IE.Gecko.WebKit.Opera 2.识别浏览器 主流浏览器包含四种:IE.Chrome.Firefox.Opera 3

javascript不使用图片验证与服务端检测验证码方法

网页特效不使用图片验证与服务端检测验证码方法 很多源码都是通过请求服务器来匹配验证码 突然想到,如果在浏览器通过salt+md5混合加密后,与密文(在页面上)匹配,即可在本地 知道验证码是否正确 var seccode_hash = 'xxxxxx'; // 32位加密后的验证码 var seccode_salt = 'xxsxxx'; // 随机字符 var seccode_count = 255; // 加密次数 当用户提交时,将验证码加密,与密文匹配: // 长度为8位的英文(大小写忽略)

javascript实现全角半角检测的方法_javascript技巧

本文实例讲述了javascript实现全角半角检测的方法.分享给大家供大家参考.具体如下: //全角半角校验 function issbccase(strTmp) { for (var i=0; i<strTmp.length; i++) { if (strTmp.charCodeAt(i) > 128){ return true; break; } } return false; } 希望本文所述对大家的javascript程序设计有所帮助. 以上是小编为您精心准备的的内容,在的博客.问答.

jQuery实现响应浏览器缩放大小并改变背景颜色_jquery

/*Javascript代码片段*/ //定义一个方法:这个方法控制浏览器页面背景色的切换变化 function myfunction(){ $('body').toggleClass('bgcolor'); } //添加监控页面窗口变化的方法 $(window).resize(myfunction); //并且在页面加载时即调用 myfunction(); 以上是小编为您精心准备的的内容,在的博客.问答.公众号.人物.课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索浏览器 缩放大小