我对JavaScript深入研究了多少,我发现自己也有那么多疑问。例如,我们有window.onresize
事件处理程序,如果我说:
window.onresize = resize;
function resize()
{
console.log("resize event detected!");
}
这不是会杀死连接到同一事件的所有其他函数,并在控制台中记录我的消息吗?
如果是这样的话,我认为应该有另一个通知程序来告诉我窗口大小调整事件-或者一个变通方法-而不是覆盖绑定到相同事件的其他函数。
或者我完全被它的用法搞糊涂了?
发布于 2010-07-27 08:33:14
您可以保存旧的onresize函数,并在自定义的resize函数之前或之后调用它。应该可以工作的示例如下所示:
var oldResize = window.onresize;
function resize() {
console.log("resize event detected!");
if (typeof oldResize === 'function') {
oldResize();
}
}
window.onresize = resize;
如果有几个onresize函数,此方法可能会出现问题。您可以将旧的onresize函数保存为闭包的一部分,并在您的函数之后调用旧的函数。
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中的任何内容(如果有任何内容)。
发布于 2010-07-27 08:08:17
一种方法是这样做的:
function resize() { /* ... */ }
var existing = window.onresize;
window.onresize = function() {
if (existing) {
existing();
}
resize();
}
或者你可以使用像jQuery这样的东西,它将所有的东西包装在一个更简单的结构中:
$(window).resize(function() { /* ... */ });
它会自动为您处理多个处理程序。
https://stackoverflow.com/questions/3339825
复制相似问题