tdesign-mobile-vue
Version:
tdesign-mobile-vue
108 lines (104 loc) • 2.83 kB
JavaScript
/**
* tdesign v1.15.0
* (c) 2026 TDesign Group
* @license MIT
*/
import { shallowRef, ref, watch, unref, onMounted, onUnmounted } from 'vue';
import { useResizeObserver } from './useResizeObserver.js';
import '@babel/runtime/helpers/typeof';
function resolveElement(element) {
if (!element) return null;
if (typeof element === "string") {
return document.querySelector(element);
}
if (element instanceof HTMLElement) {
return element;
}
return null;
}
function getElementRect(element) {
var rect = element.getBoundingClientRect();
return {
top: rect.top,
bottom: rect.bottom,
left: rect.left,
right: rect.right,
width: rect.width,
height: rect.height
};
}
function useElementRect(element) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var _options$immediate = options.immediate,
immediate = _options$immediate === void 0 ? true : _options$immediate,
_options$resizeObserv = options.resizeObserver,
enableResizeObserver = _options$resizeObserv === void 0 ? false : _options$resizeObserv;
var elementRef = shallowRef(null);
var rect = ref({
top: 0,
bottom: 0,
left: 0,
right: 0,
width: 0,
height: 0
});
var updateElement = function updateElement() {
var elementValue = unref(element);
var el = resolveElement(elementValue);
elementRef.value = el;
if (el) {
rect.value = getElementRect(el);
}
};
var _useResizeObserver = useResizeObserver(elementRef, function () {
if (elementRef.value) {
rect.value = getElementRect(elementRef.value);
}
}, {
immediate: false,
onResize: true,
onVisibilityChange: false
}),
stopResizeObserver = _useResizeObserver.stop,
startResizeObserver = _useResizeObserver.start;
watch(function () {
return unref(element);
}, function () {
stopResizeObserver();
updateElement();
if (enableResizeObserver) {
startResizeObserver();
}
}, {
flush: "post"
});
onMounted(function () {
if (immediate) {
updateElement();
if (enableResizeObserver) {
startResizeObserver();
}
}
});
onUnmounted(function () {
stopResizeObserver();
});
return {
element: elementRef,
rect: rect,
updateElement: updateElement
};
}
function useElementHeight(target) {
var options = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
var _useElementRect = useElementRect(target, options),
rect = _useElementRect.rect;
return {
height: ref(function () {
return rect.value.height;
}),
calculateHeight: function calculateHeight() {}
};
}
export { useElementRect as default, getElementRect, resolveElement, useElementHeight };
//# sourceMappingURL=useElementRect.js.map