如何在JavaScript中触发窗口调整大小事件?我在窗口调整大小时注册了一个触发器。我想知道如何触发要调用的事件。例如,当隐藏div时,我希望调用我的触发器函数。我发现window.resizeTo()可以触发该功能,但还有其他解决方案吗?
3 回答
犯罪嫌疑人X
TA贡献2080条经验 获得超4个赞
在可能的情况下,我更喜欢调用函数而不是调度事件。如果您可以控制要运行的代码,则此方法很有效,但请参阅下面有关您不拥有代码的情况。
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);}
当年话下
TA贡献1890条经验 获得超9个赞
我相信这适用于所有浏览器:
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
TA贡献1812条经验 获得超5个赞
对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" >..
添加回答
举报
0/150
提交
取消