@zohodesk/components
Version:
In this Package, we Provide Some Basic Components to Build Web App
76 lines (63 loc) • 1.61 kB
JavaScript
function getBorderBoxSizeFromEntry(entry) {
const {
borderBoxSize
} = entry;
return borderBoxSize[0];
}
function getSize(entry) {
const borderBoxSize = getBorderBoxSizeFromEntry(entry);
return {
height: borderBoxSize.blockSize,
width: borderBoxSize.inlineSize
};
}
export default class ResizeObserverPolyfill {
constructor(onResize) {
this.resizeHandler = this.resizeHandler.bind(this);
this.onResize = onResize;
this.targetNode = null;
this.size = {
height: 0,
width: 0
};
this.resizeObserverInstance = new window.ResizeObserver(this.resizeHandler);
}
replaceResizeHandler(onResize) {
this.onResize = onResize;
}
getEntry(entries) {
return entries[0];
}
resizeHandler(entries) {
if (!this.targetNode || !entries.length) {
return;
}
const entry = this.getEntry(entries);
const currentSize = getSize(entry);
if (this.size && currentSize.height === this.size.height && currentSize.width === this.size.width) {
return;
}
this.size = currentSize;
this.onResize(this.size, this.targetNode);
return true;
}
observe(targetNode) {
this.targetNode = targetNode;
this.resizeObserverInstance.observe(targetNode);
}
replaceObservationElement(targetNode) {
if (this.targetNode === targetNode) {
return;
}
this.targetNode && this.disconnect();
targetNode && this.observe(targetNode);
}
disconnect() {
this.resizeObserverInstance.disconnect();
this.targetNode = null;
this.size = {
height: 0,
width: 0
};
}
}