繁体   English   中英

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

[英]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似乎无法实现addEventListenerremoveEventListener并且取消绑定 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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM