parent
986eacae9a
commit
946f91f387
|
@ -105,10 +105,17 @@ const shouldDraggable = computed(
|
||||||
() => draggable.value && !shouldFullscreen.value && header.value,
|
() => draggable.value && !shouldFullscreen.value && header.value,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
const getAppendTo = computed(() => {
|
||||||
|
return appendToMain.value
|
||||||
|
? `#${ELEMENT_ID_MAIN_CONTENT}>div:not(.absolute)>div`
|
||||||
|
: undefined;
|
||||||
|
});
|
||||||
|
|
||||||
const { dragging, transform } = useModalDraggable(
|
const { dragging, transform } = useModalDraggable(
|
||||||
dialogRef,
|
dialogRef,
|
||||||
headerRef,
|
headerRef,
|
||||||
shouldDraggable,
|
shouldDraggable,
|
||||||
|
getAppendTo,
|
||||||
);
|
);
|
||||||
|
|
||||||
const firstOpened = ref(false);
|
const firstOpened = ref(false);
|
||||||
|
@ -198,11 +205,6 @@ function handleFocusOutside(e: Event) {
|
||||||
e.preventDefault();
|
e.preventDefault();
|
||||||
e.stopPropagation();
|
e.stopPropagation();
|
||||||
}
|
}
|
||||||
const getAppendTo = computed(() => {
|
|
||||||
return appendToMain.value
|
|
||||||
? `#${ELEMENT_ID_MAIN_CONTENT}>div:not(.absolute)>div`
|
|
||||||
: undefined;
|
|
||||||
});
|
|
||||||
|
|
||||||
const getForceMount = computed(() => {
|
const getForceMount = computed(() => {
|
||||||
return !unref(destroyOnClose) && unref(firstOpened);
|
return !unref(destroyOnClose) && unref(firstOpened);
|
||||||
|
|
|
@ -13,6 +13,7 @@ export function useModalDraggable(
|
||||||
targetRef: Ref<HTMLElement | undefined>,
|
targetRef: Ref<HTMLElement | undefined>,
|
||||||
dragRef: Ref<HTMLElement | undefined>,
|
dragRef: Ref<HTMLElement | undefined>,
|
||||||
draggable: ComputedRef<boolean>,
|
draggable: ComputedRef<boolean>,
|
||||||
|
containerSelector?: ComputedRef<string | undefined>,
|
||||||
) {
|
) {
|
||||||
const transform = reactive({
|
const transform = reactive({
|
||||||
offsetX: 0,
|
offsetX: 0,
|
||||||
|
@ -30,20 +31,36 @@ export function useModalDraggable(
|
||||||
}
|
}
|
||||||
|
|
||||||
const targetRect = targetRef.value.getBoundingClientRect();
|
const targetRect = targetRef.value.getBoundingClientRect();
|
||||||
|
|
||||||
const { offsetX, offsetY } = transform;
|
const { offsetX, offsetY } = transform;
|
||||||
const targetLeft = targetRect.left;
|
const targetLeft = targetRect.left;
|
||||||
const targetTop = targetRect.top;
|
const targetTop = targetRect.top;
|
||||||
const targetWidth = targetRect.width;
|
const targetWidth = targetRect.width;
|
||||||
const targetHeight = targetRect.height;
|
const targetHeight = targetRect.height;
|
||||||
const docElement = document.documentElement;
|
|
||||||
const clientWidth = docElement.clientWidth;
|
|
||||||
const clientHeight = docElement.clientHeight;
|
|
||||||
|
|
||||||
const minLeft = -targetLeft + offsetX;
|
let containerRect: DOMRect | null = null;
|
||||||
const minTop = -targetTop + offsetY;
|
|
||||||
const maxLeft = clientWidth - targetLeft - targetWidth + offsetX;
|
if (containerSelector?.value) {
|
||||||
const maxTop = clientHeight - targetTop - targetHeight + offsetY;
|
const container = document.querySelector(containerSelector.value);
|
||||||
|
if (container) {
|
||||||
|
containerRect = container.getBoundingClientRect();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
let maxLeft, maxTop, minLeft, minTop;
|
||||||
|
if (containerRect) {
|
||||||
|
minLeft = containerRect.left - targetLeft + offsetX;
|
||||||
|
maxLeft = containerRect.right - targetLeft - targetWidth + offsetX;
|
||||||
|
minTop = containerRect.top - targetTop + offsetY;
|
||||||
|
maxTop = containerRect.bottom - targetTop - targetHeight + offsetY;
|
||||||
|
} else {
|
||||||
|
const docElement = document.documentElement;
|
||||||
|
const clientWidth = docElement.clientWidth;
|
||||||
|
const clientHeight = docElement.clientHeight;
|
||||||
|
minLeft = -targetLeft + offsetX;
|
||||||
|
minTop = -targetTop + offsetY;
|
||||||
|
maxLeft = clientWidth - targetLeft - targetWidth + offsetX;
|
||||||
|
maxTop = clientHeight - targetTop - targetHeight + offsetY;
|
||||||
|
}
|
||||||
|
|
||||||
const onMousemove = (e: MouseEvent) => {
|
const onMousemove = (e: MouseEvent) => {
|
||||||
let moveX = offsetX + e.clientX - downX;
|
let moveX = offsetX + e.clientX - downX;
|
||||||
|
|
Loading…
Reference in New Issue