comic-plus
Version:
<p align="center"> <img width="200px" src="./logo.png"/> </p>
45 lines (44 loc) • 1.22 kB
JavaScript
;
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
require("../utils/config.js");
const tools = require("../utils/tools.js");
const vue = require("vue");
require("@vueuse/core");
const useResize = (target, callback, options) => {
const ob = vue.ref(null);
const cFn = (options == null ? void 0 : options.debounce) ? tools.debounce(callback, options == null ? void 0 : options.debounce) : callback;
function createObserver() {
disconnect();
const isSupported = typeof ResizeObserver !== "undefined";
if (!isSupported) return false;
ob.value = new ResizeObserver((entries) => {
cFn(entries[0].contentRect);
});
ob.value.observe(target.value);
}
function disconnect() {
if (ob.value) {
ob.value.disconnect();
ob.value = null;
}
}
vue.watch(target, (val) => {
if (val) {
createObserver();
}
if (!val) {
disconnect();
}
});
vue.onMounted(() => {
createObserver();
if (options == null ? void 0 : options.immediate) {
callback(target.value.getBoundingClientRect());
}
});
vue.onUnmounted(() => {
disconnect();
});
return disconnect;
};
exports.useResize = useResize;