为什么在IE8的低变焦级别下,onresize不能显示呢?

Why does onresize fire when it shouldn't at low zoom levels in IE8?

本文关键字:onresize 不能 显示 IE8 变焦 为什么      更新时间:2023-09-26

我编写了一些jquery来调整元素的大小,并在浏览器窗口调整大小时关闭页面上所有打开的弹出窗口:

    addEvent({
        target: window,
        eventListener: 'onresize',
        func: function (e) {
            resizeElements(); //This resizes loads of stuff
            closeAllPopups(); //Closes any open popups
        }
    });

100%缩放效果很好。但是,在小于90%的缩放级别时,即使没有调整窗口大小,也会不断调用onresize。效果是弹出窗口不会打开-它们会立即关闭。

这似乎只发生在IE8上。

知道为什么会发生这种情况吗-这仅仅是一个IE8的bug吗?谁能提出一个修复或变通的建议?

如何检查窗口的原始大小和重新大小大小,然后尝试调用您的函数?

所以,即使你在90%的视图加载,这个窗口的大小将是原始的大小,只有当你调整大小(在90%的视图下),你的函数将被调用?

$(document).ready(function(){
    var original_width = $(window).width();
    var original_height = $(window).height();
    $(window).resize(function() {
        var resize_width = $(window).width();
        var resize_height = $(window).height();
        if(original_width != resize_width && original_height != resize_height){
            alert('You resized!');
            // resizeElements(); //This resizes loads of stuff
            // closeAllPopups(); //Closes any open popups
        }
    });
}); 

你可以试着用一个定时器来破解它:

addEvent({
        target: window,
        eventListener: 'onresize',
        func: function (e) {
            clearTimeout(window.resizeTimeout);
            window.resizeTimeout = setTimeout(function(){
                resizeElements(); //This resizes loads of stuff
                closeAllPopups(); //Closes any open popups
            },50);
        }
    });

我在这里使用全局对象窗口来设置resizeTimeout变量,但更好的是使用一个局部变量

没有办法在浏览器本身"修复"这个错误,所以你只需要解决有一个不断触发的调整大小事件。所以烤是正确的使用时间,但你不是在寻找一个计时器。您需要存储时间,然后确保在事件再次触发之前已经经过了足够的时间,如下所示:

var _interval = 1000;// milliseconds
var _resize = 0;
addEvent({
    target: window,
    eventListener: 'onresize',
    func: function (e) {
        if (Date.now() - _resize < _interval)
            return;
        _resize = Date.now();
        resizeElements(); //This resizes loads of stuff
        closeAllPopups(); //Closes any open popups
    }
});