跨浏览器窗口调整大小事件 - JavaScript/jQuery

Bud*_*Joe 240 javascript jquery resize cross-browser

在Firefox,WebKit和Internet Explorer中使用的窗口调整大小事件的正确(现代)方法是什么?

你可以打开/关闭两个滚动条吗?

And*_*ges 367

jQuery有一个内置的方法:

$(window).resize(function () { /* do something */ });
Run Code Online (Sandbox Code Playgroud)

对于用户界面的响应起见,你可以考虑使用的setTimeout只有经过数毫秒打电话给你的代码,如下面的例子,启发这样:

function doSomething() {
    alert("I'm done resizing for the moment");
};

var resizeTimer;
$(window).resize(function() {
    clearTimeout(resizeTimer);
    resizeTimer = setTimeout(doSomething, 100);
});
Run Code Online (Sandbox Code Playgroud)

  • 为什么在使用按钮将窗口扩展到全屏时不会触发此事件? (34认同)
  • 以利亚,这是JavaScript.你写的不正确(除了你用new构建的一个特定情况). (6认同)
  • 值得一提的是,这个jQuery函数"添加"函数调用当前应该在窗口调整大小上调用的函数列表.它不会覆盖当前在窗口调整大小上安排的现有事件. (3认同)
  • @Sly对我而言,它适用于Mac上的Safari,Chrome和Mozilla.你使用哪种浏览器? (2认同)
  • @Sly:`$('.button').on({click:function(){/*your code*/$(window).trigger('resize')})` (2认同)
  • 如果您不想使用jQuery,请参阅下面的[我的回答](http://stackoverflow.com/a/18745301/895558). (2认同)

小智 48

$(window).bind('resize', function () { 

    alert('resize');

});
Run Code Online (Sandbox Code Playgroud)

  • 我更喜欢绑定方法,因为resize()方法实际上实际上是完全绑定方法的快捷方式,我经常发现通常有多个事件处理程序I*应该应用于元素. (4认同)

Jon*_*dlm 42

这是非jQuery方式进入resize事件:

window.addEventListener('resize', function(event){
  // do stuff here
});
Run Code Online (Sandbox Code Playgroud)

它适用于所有现代浏览器.它并没有油门你什么.以下是的实例.


jav*_*ure 17

很抱歉打开一个旧线程,但如果有人不想使用jQuery,你可以使用:

function foo(){....};
window.onresize=foo;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这将破坏可能绑定到window.onresize的任何现有处理程序.如果您的脚本必须与其他脚本一起生活在一个生态系统中,那么您不应该假设您的脚本是唯一想要在窗口大小调整上执行某些操作的脚本.如果你不能使用像jQuery这样的框架,你至少应该考虑抓住现有的window.onresize,并将你的处理程序添加到它的末尾,而不是完全破坏它. (8认同)
  • @TomAuger*"你至少应该考虑抓住现有的window.onresize,并将你的处理程序添加到它的末尾"* - 你可能意味着相反,即"在你的处理程序末尾调用现有的处理程序"?我真的希望看到一个javascript代码,它会在现有函数的末尾添加一些内容:-) (2认同)

Pao*_*ino 8

由于你对jQuery开放,这个插件似乎可以解决问题.


bas*_*sim 5

使用jQuery 1.9.1我发现虽然在技术上完全相同)*,但这在IE10中不起作用(但在Firefox中):

// did not work in IE10
$(function() {
    $(window).resize(CmsContent.adjustSize);
});
Run Code Online (Sandbox Code Playgroud)

虽然这适用于两种浏览器:

// did work in IE10
$(function() {
    $(window).bind('resize', function() {
        CmsContent.adjustSize();
    };
});
Run Code Online (Sandbox Code Playgroud)

编辑:
)*实际上技术上并不完全相同,正如WraithKennyHenry Blyth的评论中所指出和解释的那样.