【问题标题】:Remove window "resize" listener删除窗口“调整大小”侦听器
【发布时间】:2012-03-31 05:12:41
【问题描述】:

这个问题与堆栈溢出问题“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 事件等其他函数正常工作。


有谁知道我如何在添加调整大小事件后删除它,或者干脆让 IE 停止延迟。 (


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

【问题讨论】:

    标签: javascript internet-explorer resize dom-events


    【解决方案1】:

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

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

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

    edit — 好的,现在我知道这实际上就是您想要做的。我仍然认为这种方式要简单得多。

    【讨论】:

    • 我正在开发的应用程序(不是我开发的)在页面移动时重新定位弹出窗口。因此,由于调整大小,必须发生一些事情。但是,我添加了一个计数器,它打印出调整大小事件被调用的次数,并且它只被调用了大约 3 次。事实证明,scrollHandler 函数内部是一个变量,它前面没有“var”。定义变量“var obj”解决了这个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多