这个问题与堆栈溢出问题“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
似乎无法实现addEventListener
或removeEventListener
,解除绑定jQuery并不能阻止IE继续发作。它适用于所有其他浏览器。
期望的行为:这里的目标实际上是让IE停止重复执行代码,以便onclick
事件等其他功能起作用。
有没有人知道如何在添加resize事件后删除resize事件或者只是让IE停止被阻止。 (< - 如果你可以使IE不被延迟,则加分。)
解决方案:在scrollHandler
函数内部,未使用var
前缀声明变量。添加var让所有邪恶的仙女都消失了。
答案 0 :(得分:1)
我认为你这是错误的做法。你应该做的是使用该超时来阻止“scrollHandler()”的调用,直到窗口大小调整活动暂停一段时间(比如你正在使用的100ms延迟)。
var resizeTimeout;
function resizeHandler() {
cancelTimeout(resizeTimeout);
resizeTimeout = setTimeout(scrollHandler, 100);
}
$(window).resize(resizeHandler);
在任何浏览器中,尝试在“resize”处理程序中进行DOM更新(我假设是“scrollHandler”内部的内容)并不是一个好主意。通过这样做,你根本不需要摆脱“调整大小”处理程序。
编辑 - 现在好了,我发现这实际上是你想要做的。我仍然认为这种方式更简单。