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
	
	 yuhengshen
						yuhengshen