如何在 Internet Explorer 7 中获得缩放级别? (javascript)

Posted

技术标签:

【中文标题】如何在 Internet Explorer 7 中获得缩放级别? (javascript)【英文标题】:How to get zoom level in Internet Explorer 7? (javascript) 【发布时间】:2010-10-15 09:37:27 【问题描述】:

在 Internet Explorer 7 中,某些属性(鼠标坐标)被视为物理属性,而其他属性则是逻辑属性(偏移)。这实质上要求 Web 开发人员了解或计算缩放状态。在 IE8 版本中,所有属性都是合乎逻辑的。

【问题讨论】:

另见***.com/questions/1713771/… 【参考方案1】:

你可以使用:

var b = document.body.getBoundingClientRect();    
alert((b.right - b.left)/document.body.clientWidth);

非常感谢@niclasnorgren!

【讨论】:

【参考方案2】:

另外,如果您需要在 IE 8 中进行检查,您可以使用 window.screen.deviceXDPI 和 window.screen.deviceYDPI。默认为 96 dpi,如果放大,数字会更大(放大 150% 时为 144)

【讨论】:

谢谢,这正是我需要找到“缩放比例”:-) window.screen.deviceXDPI 在 IE9 的 IE8、IE7 仿真模式下可靠工作。 getBoundingClientRect() 方法在所有缩放模式下返回 100%。 请注意 screen.deviceXDPI 仅适用于 IE,不适用于 Chrome。 FWIW,注意window.screen.deviceXDPI 独立于 Windows 显示设置 DPI; IE8 中的 100% 始终为 96 dpi。 window.screen.logicalXDPI 似乎也不受显示设置的影响,因此简单地比较两者可能是一种很好的检测方法。【参考方案3】:

接受的答案有一个小的语法错误(正文而不是 document.body)。这似乎也可以解决问题。

var rect = document.body.getBoundingClientRect(); 
var zoomLevel = Math.round((rect.right-rect.left)/document.body.clientWidth * 100); 

【讨论】:

【参考方案4】:

我已在另一篇文章中发布了解决方案,您可以在此处获取。这也适用于 IE7。

Auto-detect a screen resolution and change browser zoom with javascript?

This will help to detect browser zoom tested on all browser
<script>
window.utility = function(utility)
utility.screen = 
    rtime : new Date(1, 1, 2000, 12,00,00),
    timeout : false,
    delta : 200
;
utility.getBrowser = function()
    var $b = $.browser;
    $.extend(utility.screen,$.browser);
    utility.screen.isZoomed = false;
    var screen  = utility.screen;
    screen.zoomf  = screen.zoom = 1;
    screen.width = window.screen.width;
    screen.height = window.screen.height;
    if($b.mozilla) //FOR MOZILLA
        screen.isZoomed  = window.matchMedia('(max--moz-device-pixel-ratio:0.99), (min--moz-device-pixel-ratio:1.01)').matches;
     else 
        if($b.chrome) //FOR CHROME
            screen.zoom = (window.outerWidth - 8) / window.innerWidth;
            screen.isZoomed = (screen.zoom < .98 || screen.zoom > 1.02)
         else if($b.msie)//FOR IE7,IE8,IE9
            var _screen = document.frames.screen;
            screen.zoom = ((((_screen.deviceXDPI / _screen.systemXDPI) * 100 + 0.9).toFixed())/100);
            screen.isZoomed = (screen.zoom < .98 || screen.zoom > 1.02);
            if(screen.isZoomed) screen.zoomf = screen.zoom;
            screen.width = window.screen.width*screen.zoomf;
            screen.height = window.screen.height*screen.zoomf;
        
    
    return utility.screen;
;
  window.onresize = function(e)
       utility.screen.rtime = new Date();
        if (utility.screen.timeout === false) 
              utility.screen.timeout = true;
              setTimeout(window.resizeend, utility.screen.delta);
        
  ;
window.resizeend = function() 
    if (new Date() - utility.screen.rtime < utility.screen.delta) 
        setTimeout(window.resizeend, utility.screen.delta);
     else 
        utility.screen.timeout = false;
        utility.screen = utility.getBrowser();
        if(window.onresizeend) window.onresizeend (utility.screen);
        if(utility.onResize) utility.onResize(utility.screen);
                   
;
window.onresizeend = function(screen)
    if(screen.isZoomed)
        $('body').text('zoom is not 100%');
    else
        $('body').text('zoom is 100% & browser resolution is'+[screen.width+'X'+screen.height]);
    
;
$(document).ready(function()
    window.onresize();
);
return utility;
();
</script>

Demo

【讨论】:

以上是关于如何在 Internet Explorer 7 中获得缩放级别? (javascript)的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Windows Phone 7 上调试 Internet Explorer?

在同一台计算机上运行 Internet Explorer 6、Internet Explorer 7 和 Internet Explorer 8

在 Internet Explorer 7 中打开多个页面的 Windows 控制台命令

使用百分比宽度进行布局时如何修复 Internet Explorer 7 错误?

内联块在 Internet Explorer 7、6 中不起作用

Internet Explorer z-index 错误?