首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Internet中的window.resize事件触发

Internet中的window.resize事件触发
EN

Stack Overflow用户
提问于 2009-12-05 17:06:21
回答 15查看 63.5K关注 0票数 76

如您所知,在Internet中,当页面上的任何元素都被调整大小时,就会触发 window.resize事件。通过给页面元素分配/更改其高度或样式属性来调整页面元素的大小,通过简单地向其添加一个子元素,或者其他什么--即使元素调整大小不影响视口本身的尺寸--并不重要。

在我的应用程序中,这导致了一个令人讨厌的递归,因为在我的window.resize处理程序中,我正在调整一些元素的大小,这反过来又会重新触发window.resize等等,这只是IE中的一个问题。

有什么方法可以防止在IE中触发window.resize以响应页面上的元素被调整大小?

我还应该提到,我正在使用jQuery。

EN

回答 15

Stack Overflow用户

发布于 2009-12-17 11:55:41

我刚刚发现了另一个可能对你有帮助的问题。

我使用jQuery,我有window.resize事件来调用一个函数,这个函数将重新定位附加到身体上的div。

现在,当我设置附加的div的左css属性时,window.resize事件就会无缘无故地触发。

它导致一个无限循环,一次又一次地触发window.resize。

没有修复的代码:

代码语言:javascript
运行
复制
$(window).resize(function(){
    var onResize = function(){
        //The method which alter some css properties triggers 
        //window.resize again and it ends in an infinite loop
        someMethod();
    }
    window.clearTimeout(resizeTimeout);
    resizeTimeout = window.setTimeout(onResize, 10);
});

解决方案:

代码语言:javascript
运行
复制
var winWidth = $(window).width(),
    winHeight = $(window).height();

$(window).resize(function(){
    var onResize = function(){
        //The method which alter some css properties triggers 
        //window.resize again and it ends in an infinite loop
        someMethod();
    }

    //New height and width
    var winNewWidth = $(window).width(),
        winNewHeight = $(window).height();

    // compare the new height and width with old one
    if(winWidth!=winNewWidth || winHeight!=winNewHeight){
        window.clearTimeout(resizeTimeout);
        resizeTimeout = window.setTimeout(onResize, 10);
    }
    //Update the width and height
    winWidth = winNewWidth;
    winHeight = winNewHeight;
});

因此,基本上,它将检查是否改变了高度或宽度(只有当您实际调整窗口大小时才会发生这种情况)。

票数 60
EN

Stack Overflow用户

发布于 2012-01-08 11:21:17

这对我来说很有意义,似乎适用于IE7和以上版本:

代码语言:javascript
运行
复制
    //variables to confirm window height and width
    var lastWindowHeight = $(window).height();
    var lastWindowWidth = $(window).width();

    $(window).resize(function() {

        //confirm window was actually resized
        if($(window).height()!=lastWindowHeight || $(window).width()!=lastWindowWidth){

            //set this windows size
            lastWindowHeight = $(window).height();
            lastWindowWidth = $(window).width();

            //call my function
            myfunction();


        }
    });
票数 25
EN

Stack Overflow用户

发布于 2012-11-08 21:21:07

将您的调整大小侦听器绑定到.one(),以便它在触发后解除绑定。然后你可以做你想做的任何事情,只要在最后你重新绑定大小调整的监听器。我发现最简单的方法是将调整大小的侦听器放在一个匿名函数中,如下所示:

代码语言:javascript
运行
复制
var resizeListener = function(){
  $(window).one("resize",function(){ //unbinds itself every time it fires

    //resize things

    setTimeout(resizeListener,100); //rebinds itself after 100ms
  });
}
resizeListener();

从技术上讲,您不需要将setTimeout包装在resizeListener()上,但是我把它作为一个普通的案例和一些额外的节流器扔进去。

票数 19
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1852751

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档