[英]Remove window “resize” listener
这个问题与堆栈溢出问题“ 在 Internet Explorer 中触发 window.resize 事件”密切相关。
问题:我正在尝试修复 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
事件)工作。
有谁知道我如何在添加后删除调整大小事件,或者只是让 IE 停止被延迟。 (<-- 如果你能让 IE 不迟钝,加分。)
解决方法:在scrollHandler
函数内部,未使用var
前缀声明变量。 添加 var 使所有邪恶的仙女都消失了。
我认为你这样做是错误的。 您应该做的是使用该超时来阻止“scrollHandler()”的调用,直到窗口大小调整活动暂停一段时间(例如您使用的 100 毫秒延迟)。
var resizeTimeout;
function resizeHandler() {
cancelTimeout(resizeTimeout);
resizeTimeout = setTimeout(scrollHandler, 100);
}
$(window).resize(resizeHandler);
尝试在“调整大小”处理程序中进行 DOM 更新(我认为这是“scrollHandler”内部发生的事情)在任何浏览器中都不是一个好主意。 通过这样做,您根本不需要摆脱“调整大小”处理程序。
编辑- 好的,现在我知道这就是你想要做的。 我仍然认为这种方式要简单得多。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.