Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/78.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么onresize在不应该';在IE8中,t处于低缩放级别?_Javascript_Jquery_Internet Explorer 8_Zooming_Onresize - Fatal编程技术网

Javascript 为什么onresize在不应该';在IE8中,t处于低缩放级别?

Javascript 为什么onresize在不应该';在IE8中,t处于低缩放级别?,javascript,jquery,internet-explorer-8,zooming,onresize,Javascript,Jquery,Internet Explorer 8,Zooming,Onresize,我编写了一些jquery来调整元素大小,并在调整浏览器窗口大小时关闭页面上所有打开的弹出窗口: addEvent({ target: window, eventListener: 'onresize', func: function (e) { resizeElements(); //This resizes loads of stuff closeAllPopups(); //Closes

我编写了一些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错误吗?有人能建议一个修复或解决方法吗?

您可以尝试使用计时器消除它的抖动:

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变量,但最好使用局部变量。

您可以尝试使用计时器对其进行去抖动:

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
    }
});
var\u间隔=1000;//毫秒
var _resize=0;
添加剂({
目标:窗口,
eventListener:'onresize',
func:函数(e){
如果(Date.now()-\u resize<\u interval)
返回;
_resize=Date.now();
resizeElements();//这会调整加载的内容的大小
CloseAllPopus();//关闭所有打开的弹出窗口
}
});
无法在浏览器本身中“修复”此错误,因此您只需解决不断触发的调整大小事件。因此,使用时间是正确的,但你不是在寻找计时器。您需要存储时间,然后确保在再次触发事件之前经过足够的时间,如下所示:

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
    }
});
var\u间隔=1000;//毫秒
var _resize=0;
添加剂({
目标:窗口,
eventListener:'onresize',
func:函数(e){
如果(Date.now()-\u resize<\u interval)
返回;
_resize=Date.now();
resizeElements();//这会调整加载的内容的大小
CloseAllPopus();//关闭所有打开的弹出窗口
}
});

检查窗口的原始大小和重新调整大小,然后尝试调用您的函数怎么样

所以,即使你是在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
        }
    });
}); 

检查窗口的原始大小和重新大小,然后尝试调用您的函数,怎么样

所以,即使你是在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
        }
    });
}); 

调用resizeElements()时,它不是重新触发窗口大小调整事件吗?(如果元件具有静态或相对位置)为什么仅在IE8上?我不知道。不,它不会重新触发它,可能是因为resizeElements不会调整每个元素的大小,只调整其中的一些。调用resizeElements()时,它不是重新触发窗口调整大小事件吗?(如果元件具有静态或相对位置)为什么仅在IE8上?我不知道。不,它不会重新触发它,可能是因为resizeElements不会调整每个元素的大小,只是其中的一些。对不起。在这里,脱铃是没有用的。问题是,
onresize
根本不会被调用。即使窗口未调整大小,也会调用它。(我会澄清我在问题中的措辞)对不起。在这里,脱铃是没有用的。问题是,
onresize
根本不会被调用。即使窗口未调整大小,也会调用它。(我将澄清我在问题中的措辞)一个变通办法就可以了。但我认为这个答案行不通。我仍然希望在调整窗口大小时触发onresize事件。此方法将在触发一次后停止再次触发。不,不会。此示例防止事件每秒触发一次以上。再看一遍代码。也许你真的应该在说它不起作用之前试试。一个变通方法就可以了。但我认为这个答案行不通。我仍然希望在调整窗口大小时触发onresize事件。此方法将在触发一次后停止再次触发。不,不会。此示例防止事件每秒触发一次以上。再看一遍代码。也许你真的应该在说它不起作用之前试一下。可笑的简单。但是太完美了!谢谢你-这对我来说太好了。可笑的简单。但是太完美了!谢谢你-这对我很有用。