-
犯罪嫌疑人X
在可能的情况下,我更喜欢调用函数而不是调度事件。如果您可以控制要运行的代码,则此方法很有效,但请参阅下面有关您不拥有代码的情况。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);}
-
当年话下
我相信这适用于所有浏览器:var event;if (typeof (Event) === 'function') {
event = new Event('resize');} else { /*IE*/
event = document.createEvent('Event');
event.initEvent('resize', true, true);}window.dispatchEvent(event);
-
慕雪6442864
对RxJS的回应说像Angular中的东西size$: Observable<number> = fromEvent(window, 'resize').pipe(
debounceTime(250),
throttleTime(300),
mergeMap(() => of(document.body.clientHeight)),
distinctUntilChanged(),
startWith(document.body.clientHeight),
);如果需要手动订阅(或非角度)this.size$.subscribe((g) => {
console.log('clientHeight', g);
})由于我的初始startWith值可能不正确(发送更正)window.dispatchEvent(new Event('resize'));在说Angular(我可以..)<div class="iframe-container" [style.height.px]="size$ | async" >..