Javascript - 删除窗口“调整大小”侦听器

时间:2012-03-14 17:41:03

标签: javascript internet-explorer javascript-events resize

这个问题与堆栈溢出问题“window.resize event firing in Internet Explorer”密切相关。

问题: 我试图修复Internet Explorer 8中的调整大小问题。目前,重复调用resize函数会导致IE基本上锁定 - 用户无法再使用调用javascript操作的按钮。

之前的尝试:

var resizeTimeout;
var resizeHandler = function() {
    clearTimeout(resizeTimeout);
    //$(window).unbind('resize', resizeHandler);
    //window.removeEventListener('resize');
    window.removeEventListener('resize', resizeHandler, false);
    scrollHandler();
    setTimeout("$(window).resize(resizeHandler);", 100);
    return true;
}
//$(window).resize(resizeHandler);
window.addEventListener('resize', resizeHandler, false);

问题window似乎无法实现addEventListenerremoveEventListener,解除绑定jQuery并不能阻止IE继续发作。它适用于所有其他浏览器。

期望的行为:这里的目标实际上是让IE停止重复执行代码,以便onclick事件等其他功能起作用。


有没有人知道如何在添加resize事件后删除resize事件或者只是让IE停止被阻止。 (< - 如果你可以使IE不被延迟,则加分。)


解决方案:scrollHandler函数内部,未使用var前缀声明变量。添加var让所有邪恶的仙女都消失了。

1 个答案:

答案 0 :(得分:1)

我认为你这是错误的做法。你应该做的是使用该超时来阻止“scrollHandler()”的调用,直到窗口大小调整活动暂停一段时间(比如你正在使用的100ms延迟)。

var resizeTimeout;
function resizeHandler() {
  cancelTimeout(resizeTimeout);
  resizeTimeout = setTimeout(scrollHandler, 100);
}
$(window).resize(resizeHandler);

任何浏览器中,尝试在“resize”处理程序中进行DOM更新(我假设是“scrollHandler”内部的内容)并不是一个好主意。通过这样做,你根本不需要摆脱“调整大小”处理程序。

编辑 - 现在好了,我发现这实际上是你想要做的。我仍然认为这种方式更简单。