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

我发现window.resizeTo()可以触发该函数,但是否有其他解决方案?


当前回答

一个纯JS,也可以在IE上工作(来自@Manfred comment)

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);
});

其他回答

在可能的情况下,我倾向于调用函数而不是分派事件。如果您可以控制想要运行的代码,那么这种方法效果很好,但如果您不拥有代码,请参阅下面的情况。

window.onresize = doALoadOfStuff;

function doALoadOfStuff() {
    //do a load of stuff
}

在本例中,您可以调用doALoadOfStuff函数,而无需分派事件。

在你的现代浏览器,你可以触发事件使用:

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

这在ie浏览器中是行不通的,在ie浏览器中,你必须进行手动操作:

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

jQuery有触发器方法,它是这样工作的:

$(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);
}

一个纯JS,也可以在IE上工作(来自@Manfred comment)

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);
});

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

$(window).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. resizeby()将触发window的onresize事件。这在Javascript或VBScript中都有效。

窗口。resizeBy(xDelta, yDelta)调用like window。resizeBy(-200, -200)将页面缩小200px * 200px。