UNPKG

vue-hooks-plus

Version:
65 lines (64 loc) 1.99 kB
"use strict"; const vue = require("vue"); const useResizeObserver = require("../useResizeObserver"); const useEventListener = require("../useEventListener"); const domTarget = require("../utils/domTarget"); const _interopDefaultLegacy = (e) => e && typeof e === "object" && "default" in e ? e : { default: e }; const useResizeObserver__default = /* @__PURE__ */ _interopDefaultLegacy(useResizeObserver); const useEventListener__default = /* @__PURE__ */ _interopDefaultLegacy(useEventListener); function keyisUseElementBoundingReturnTypeKey(key) { return ["width", "height", "top", "left", "bottom", "right"].includes(key); } function useElementBounding(target, options) { const { reset = true, windowResize = true, windowScroll = true, immediate = true } = options != null ? options : {}; const size = vue.reactive({ width: 0, height: 0, top: 0, left: 0, bottom: 0, right: 0 }); const update = () => { const targetDom = domTarget.getTargetElement(target); if (!targetDom) { if (reset) { Object.keys(size).forEach((key) => { if (keyisUseElementBoundingReturnTypeKey(key)) size[key] = 0; }); } return; } if (targetDom) { const { width, height, top, left, bottom, right } = targetDom.getBoundingClientRect(); size.width = width; size.height = height; size.top = top; size.left = left; size.bottom = bottom; size.right = right; } }; if (windowResize) { useEventListener__default.default("resize", update, { passive: true }); } if (windowScroll) { useEventListener__default.default("scroll", update, { capture: true, passive: true }); } useResizeObserver__default.default(target, update); vue.watch(() => domTarget.getTargetElement(target), update); vue.onMounted(() => { if (immediate) update(); }); return { ...vue.toRefs(size) }; } module.exports = useElementBounding;