如何触发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。