2009-08-11 32 views
2

我为我的window.resize处理程序分配了一个超时值,以便每次触发resize事件时都不会调用大小可调的resize代码。我的代码如下所示:当我给它分配一个超时处理程序时,为什么resize事件不断发射?

<script> 
function init() { 
    var hasTimedOut = false; 
    var resizeHandler = function() { 
    // do stuff 
    return false; 
    }; 

    window.onresize = function() { 
    if (hasTimedOut !== false) { 
     clearTimeout(hasTimedOut); 
    } 
    hasTimedOut = setTimeout(resizeHandler, 100); // 100 milliseconds 
    }; 
} 
</script> 
<body onload="init();"> 
... 
etc... 

在IE7(可能还有其他版本)看来,当你做这样的调整大小事件将不断火。更准确地说,它会在每个超时时间后触发 - 在这种情况下为100毫秒。

任何想法为什么或如何阻止此行为?我真的不想调用我的调整大小代码来调整每个调整大小的事件,但这种情况更糟糕。

回答

2

在你的do stuff代码中,你是否操纵了顶部,左侧,宽度,高度,边界,边距或填充属性?

您可能无意中被触发递归这无意中触发递归这无意中触发递归...

+0

没有。我所做的只是添加一些div。 – ntownsend 2009-08-11 23:33:21

+0

......并且这些div都不会导致页面内容将宽度/高度更改为导致垂直或水平滚动条出现/消失的程度? ;-)这也可能导致IE重新调整大小调整事件。 – scunliffe 2009-08-12 13:31:56

+0

我认为你有部分权利。他们不会让滚动条出现或消失,但似乎在绘制divs正在对窗口做些什么来使其触发调整大小事件。 当我用一些没有真正做任何事情的虚拟函数替换我的div绘图时,我不再看到不断调整大小的事件。 – ntownsend 2009-08-12 16:20:26

0

How to fix the resize event in IE

也,见“scunliffe”“答案在你......属性?

+0

谢谢,但我的约束之一是,我不能使用JQuery(或任何其他框架):(也许我可以弄清楚JQuery实际上在做什么,并为我自己实现它 – ntownsend 2009-08-11 23:38:40

+0

准确,我发现链接对你有用至少得到的代码和使用它 – 2009-08-12 13:27:01

+1

嗯,http://noteslog.com/post/how-to-fix-the-resize-event-in-ie/链接不工作 – 2014-07-28 03:06:19

0

IE在确定调整大小的同时确实会触发调整大小事件(您必须知道,因为您已经实施了修复超时)

我能够复制在我的测试页面上使用您的代码观看您看到的结果。

然而,问题消失,如果我增加超时为1000,而不是100.你可能想用不同的等待值来试试,看看你的作品。

Here is the test page I used:它已经建立了一个很好的动态等待期间为你一起玩。

+0

我没有看到这种行为与您的测试页面。 – ntownsend 2009-08-12 16:21:03

相关问题