jjb-lc-designable
Version:
基于alibaba-designable源码二次封装的表单设计器。
44 lines • 1.63 kB
JavaScript
import { EventDriver } from 'jjb-lc-designable/shared';
import { ViewportResizeEvent } from '../events';
import { ResizeObserver } from '@juggle/resize-observer';
import { globalThisPolyfill } from 'jjb-lc-designable/shared';
export class ViewportResizeDriver extends EventDriver {
request = null;
resizeObserver = null;
onResize = e => {
if (e.preventDefault) e.preventDefault();
this.request = requestAnimationFrame(() => {
cancelAnimationFrame(this.request);
this.dispatch(new ViewportResizeEvent({
scrollX: this.contentWindow.scrollX,
scrollY: this.contentWindow.scrollY,
width: this.contentWindow.innerWidth,
height: this.contentWindow.innerHeight,
innerHeight: this.contentWindow.innerHeight,
innerWidth: this.contentWindow.innerWidth,
view: this.contentWindow,
target: e.target || this.container
}));
});
};
attach() {
if (this.contentWindow && this.contentWindow !== globalThisPolyfill) {
this.addEventListener('resize', this.onResize);
} else {
if (this.container && this.container !== document) {
this.resizeObserver = new ResizeObserver(this.onResize);
this.resizeObserver.observe(this.container);
}
}
}
detach() {
if (this.contentWindow && this.contentWindow !== globalThisPolyfill) {
this.removeEventListener('resize', this.onResize);
} else if (this.resizeObserver) {
if (this.container && this.container !== document) {
this.resizeObserver.unobserve(this.container);
this.resizeObserver.disconnect();
}
}
}
}