首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >不重写其他绑定到window.onresize的函数的最佳实践是什么?

不重写其他绑定到window.onresize的函数的最佳实践是什么?
EN

Stack Overflow用户
提问于 2010-07-27 07:56:53
回答 2查看 6K关注 0票数 19

我对JavaScript深入研究了多少,我发现自己也有那么多疑问。例如,我们有window.onresize事件处理程序,如果我说:

代码语言:javascript
复制
window.onresize = resize;

function resize()
{
  console.log("resize event detected!");
}

这不是会杀死连接到同一事件的所有其他函数,并在控制台中记录我的消息吗?

如果是这样的话,我认为应该有另一个通知程序来告诉我窗口大小调整事件-或者一个变通方法-而不是覆盖绑定到相同事件的其他函数。

或者我完全被它的用法搞糊涂了?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2010-07-27 08:33:14

您可以保存旧的onresize函数,并在自定义的resize函数之前或之后调用它。应该可以工作的示例如下所示:

代码语言:javascript
复制
var oldResize = window.onresize;

function resize() {
    console.log("resize event detected!");
    if (typeof oldResize === 'function') {
        oldResize();
    }
}
window.onresize = resize;

如果有几个onresize函数,此方法可能会出现问题。您可以将旧的onresize函数保存为闭包的一部分,并在您的函数之后调用旧的函数。

代码语言:javascript
复制
function addResizeEvent(func) {
    var oldResize = window.onresize;
    window.onresize = function () {
        func();
        if (typeof oldResize === 'function') {
            oldResize();
        }
    };
}

function foo() {
    console.log("resize foo event detected!");
}

function bar() {
    console.log("resize bar event detected!");
}
addResizeEvent(foo);
addResizeEvent(bar);

当您调用addResizeEvent时,您向它传递了一个您想要注册的函数。它接受旧的调整大小函数,并将其存储为oldResize。当调整大小发生时,它将调用您的函数,然后调用旧的调整大小函数。您应该能够添加任意数量的呼叫。

在此示例中,当窗口调整大小时,它将调用bar,然后调用foo,然后调用存储在window.resize中的任何内容(如果有任何内容)。

票数 14
EN

Stack Overflow用户

发布于 2010-07-27 08:08:17

一种方法是这样做的:

代码语言:javascript
复制
function resize() { /* ... */ }

var existing = window.onresize;
window.onresize = function() {
    if (existing) {
        existing();
    }
    resize();
 }

或者你可以使用像jQuery这样的东西,它将所有的东西包装在一个更简单的结构中:

代码语言:javascript
复制
$(window).resize(function() { /* ... */ });

它会自动为您处理多个处理程序。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3339825

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档