3 回答

TA貢獻(xiàn)2080條經(jīng)驗(yàn) 獲得超4個(gè)贊
在可能的情況下,我更喜歡調(diào)用函數(shù)而不是調(diào)度事件。如果您可以控制要運(yùn)行的代碼,則此方法很有效,但請(qǐng)參閱下面有關(guān)您不擁有代碼的情況。
window.onresize = doALoadOfStuff;function doALoadOfStuff() { //do a load of stuff}
在此示例中,您可以在doALoadOfStuff
不調(diào)度事件的情況下調(diào)用該函數(shù)。
在現(xiàn)代瀏覽器中,您可以使用以下命令觸發(fā)事件:
window.dispatchEvent(new Event('resize'));
這在Internet Explorer中不起作用,您必須在其中進(jìn)行縮寫:
var resizeEvent = window.document.createEvent('UIEvents'); resizeEvent.initUIEvent('resize', true, false, window, 0); window.dispatchEvent(resizeEvent);
jQuery有這個(gè)trigger
方法,它的工作方式如下:
$(window).trigger('resize');
并有警告:
雖然.trigger()模擬事件激活,但是使用合成的事件對(duì)象,它并不能完美地復(fù)制自然發(fā)生的事件。
您還可以模擬特定元素上的事件......
function simulateClick(id) { var event = new MouseEvent('click', { 'view': window, 'bubbles': true, 'cancelable': true }); var elem = document.getElementById(id); return elem.dispatchEvent(event);}

TA貢獻(xiàn)1890條經(jīng)驗(yàn) 獲得超9個(gè)贊
我相信這適用于所有瀏覽器:
var event;if (typeof (Event) === 'function') { event = new Event('resize');} else { /*IE*/ event = document.createEvent('Event'); event.initEvent('resize', true, true);}window.dispatchEvent(event);

TA貢獻(xiàn)1812條經(jīng)驗(yàn) 獲得超5個(gè)贊
對(duì)RxJS的回應(yīng)
說(shuō)像Angular中的東西
size$: Observable<number> = fromEvent(window, 'resize').pipe( debounceTime(250), throttleTime(300), mergeMap(() => of(document.body.clientHeight)), distinctUntilChanged(), startWith(document.body.clientHeight), );
如果需要手動(dòng)訂閱(或非角度)
this.size$.subscribe((g) => { console.log('clientHeight', g); })
由于我的初始startWith值可能不正確(發(fā)送更正)
window.dispatchEvent(new Event('resize'));
在說(shuō)Angular(我可以..)
<div class="iframe-container" [style.height.px]="size$ | async" >..
添加回答
舉報(bào)