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

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


当前回答

我相信这应该适用于所有浏览器:

var event;
if (typeof (Event) === 'function') {
    event = new Event('resize');
} else { /*IE*/
    event = document.createEvent('Event');
    event.initEvent('resize', true, true);
}
window.dispatchEvent(event);

其他回答

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

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

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

just

$(window).resize();

是我用的…除非我误解了你的要求

用RxJS响应

比如Angular中的一些东西

size$: Observable<number> = fromEvent(window, 'resize').pipe(
            debounceTime(250),
            throttleTime(300),
            mergeMap(() => of(document.body.clientHeight)),
            distinctUntilChanged(),
            startWith(document.body.clientHeight),
          );

如果需要手动订阅(或者不是Angular)

this.size$.subscribe((g) => {
      console.log('clientHeight', g);
    })

由于我的初始startWith值可能是不正确的(派遣纠正)

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

比如说Angular(我可以…)

<div class="iframe-container"  [style.height.px]="size$ | async" >..

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