如何触发JavaScript中的窗口大小事件?

我已经在窗口大小上注册了一个触发器。 我想知道如何触发这个事件。 例如,当隐藏div时,我想要调用我的触发器函数。

我发现window.resizeTo()可以触发该函数,但有没有其他解决scheme?

在可能的情况下,我倾向于调用函数而不是派发事件。 如果你能够控制你想运行的代码,这个效果很好,但是如果你没有代码的话,请看下面的代码。

 window.onresize = doALoadOfStuff; function doALoadOfStuff() { //do a load of stuff } 

在这个例子中,您可以调用doALoadOfStuff函数而不分派事件。

在现代浏览器中,您可以使用以下方式触发事件 :

 window.dispatchEvent(new Event('resize')); 

这在Internet Explorer中不起作用,您必须在其中进行以下操作:

 var resizeEvent = window.document.createEvent('UIEvents'); resizeEvent .initUIEvent('resize', true, false, window, 0); window.dispatchEvent(resizeEvent); 

jQuery有trigger方法 ,它的工作原理是这样的:

 $(window).trigger('resize'); 

并有警告:

虽然.trigger()模拟一个事件激活,并用一个合成事件对象来完成,但它不能完美地复制一个自然发生的事件。

您还可以模拟特定元素上的事件…

 function simulateClick(id) { var event = new MouseEvent('click', { 'view': window, 'bubbles': true, 'cancelable': true }); var elem = document.getElementById(id); return elem.dispatchEvent(event); } 
 window.dispatchEvent(new Event('resize')); 

使用jQuery,你可以尝试调用触发器 :

 $(window).trigger('resize'); 

一个纯粹的JS也适用于IE(来自@Manfred评论 )

 var evt = window.document.createEvent('UIEvents'); evt.initUIEvent('resize', true, false, window, 0); window.dispatchEvent(evt); 

或为angular:

 $timeout(function() { var evt = $window.document.createEvent('UIEvents'); evt.initUIEvent('resize', true, false, $window, 0); $window.dispatchEvent(evt); }); 

我实际上没有能够得到这个与上述任何解决scheme。 一旦我用jQuery绑定事件,那么它工作正常,如下所示:

 $(window).bind('resize', function () { resizeElements(); }).trigger('resize'); 

结合pomber和avetisk的答案来覆盖所有的浏览器,而不是引起警告:

 if(typeof(Event) === 'function') { // modern browsers window.dispatchEvent(new Event('resize')); }else{ // for IE and other old browsers // causes deprecation warning on modern browsers var evt = window.document.createEvent('UIEvents'); evt.initUIEvent('resize', true, false, window, 0); window.dispatchEvent(evt); } 

只是

 $(window).resize(); 

是我使用的…除非我误解你所要求的。

window.resizeBy()将触发窗口的onresize事件。 这适用于Javascript或VBScript 。

window.resizeBy(xDelta, yDelta)调用像window.resizeBy(-200, -200)将200px缩小200px。