@opentiny/vue-renderless
Version:
An enterprise-class UI component library, support both Vue.js 2 and Vue.js 3, as well as PC and mobile.
66 lines (65 loc) • 1.84 kB
JavaScript
import "../../chunk-G2ADBYYC.js";
import { browserInfo } from "@opentiny/utils";
import { remove } from "../static";
let resizeTimeout;
let defaultInterval = 250;
const eventStore = [];
let eventHandle;
const eventListener = () => {
clearTimeout(resizeTimeout);
resizeTimeout = setTimeout(eventHandle, defaultInterval);
};
eventHandle = () => {
if (eventStore.length) {
eventStore.forEach((item) => {
item.tarList.forEach((el) => {
const { target, width, heighe } = el;
const clientWidth = target.clientWidth;
const clientHeight = target.clientHeight;
const rWidth = clientWidth && width !== clientWidth;
const rHeight = clientHeight && heighe !== clientHeight;
if (rWidth || rHeight) {
el.width = clientWidth;
el.heighe = clientHeight;
requestAnimationFrame(item.callback);
}
});
});
eventListener();
}
};
class ResizeObserverPolyfill {
constructor(callback, resizeInterval) {
this.tarList = [];
this.callback = callback;
defaultInterval = resizeInterval;
}
observe(targetObj) {
if (targetObj) {
if (!this.tarList.includes(targetObj)) {
this.tarList.push({
target: targetObj,
width: targetObj.clientWidth,
heighe: targetObj.clientHeight
});
}
if (!eventStore.length) {
eventListener();
}
if (!eventStore.includes(this)) {
eventStore.push(this);
}
}
}
unobserve(target) {
remove(eventStore, (item) => ~item.tarList.indexOf(target));
}
disconnect() {
remove(eventStore, (item) => item === this);
}
}
const Resize = browserInfo.isDoc ? window.ResizeObserver || ResizeObserverPolyfill : ResizeObserverPolyfill;
var resize_default = Resize;
export {
resize_default as default
};