Support scrolling while dragging components
This commit is contained in:
parent
5ac5f90775
commit
585c9a8f62
|
@ -53,6 +53,7 @@
|
||||||
ghost.src =
|
ghost.src =
|
||||||
"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="
|
"data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw=="
|
||||||
|
|
||||||
|
let scrollElement: HTMLElement
|
||||||
let dragInfo: GridDragInfo | undefined
|
let dragInfo: GridDragInfo | undefined
|
||||||
let styles = memo<Record<string, number> | undefined>()
|
let styles = memo<Record<string, number> | undefined>()
|
||||||
|
|
||||||
|
@ -75,6 +76,8 @@
|
||||||
// Reset when not dragging new components
|
// Reset when not dragging new components
|
||||||
$: !$dndIsDragging && stopDragging()
|
$: !$dndIsDragging && stopDragging()
|
||||||
|
|
||||||
|
const scrollOffset = () => scrollElement?.scrollTop || 0
|
||||||
|
|
||||||
const applyStyles = async (
|
const applyStyles = async (
|
||||||
instance: any,
|
instance: any,
|
||||||
styles: Record<string, number> | undefined
|
styles: Record<string, number> | undefined
|
||||||
|
@ -113,7 +116,7 @@
|
||||||
}
|
}
|
||||||
const diffX = mouseX - startX
|
const diffX = mouseX - startX
|
||||||
let deltaX = Math.round(diffX / colSize)
|
let deltaX = Math.round(diffX / colSize)
|
||||||
const diffY = mouseY - startY
|
const diffY = mouseY - startY + scrollOffset()
|
||||||
let deltaY = Math.round(diffY / GridRowHeight)
|
let deltaY = Math.round(diffY / GridRowHeight)
|
||||||
if (mode === GridDragMode.Move) {
|
if (mode === GridDragMode.Move) {
|
||||||
deltaX = minMax(deltaX, 1 - colStart, cols + 1 - colEnd)
|
deltaX = minMax(deltaX, 1 - colStart, cols + 1 - colEnd)
|
||||||
|
@ -186,7 +189,7 @@
|
||||||
mode: GridDragMode.Move,
|
mode: GridDragMode.Move,
|
||||||
grid: {
|
grid: {
|
||||||
startX: bounds.left + bounds.width / 2,
|
startX: bounds.left + bounds.width / 2,
|
||||||
startY: bounds.top + bounds.height / 2,
|
startY: bounds.top + bounds.height / 2 + scrollOffset(),
|
||||||
rowStart: parseInt(styles.gridRowStart),
|
rowStart: parseInt(styles.gridRowStart),
|
||||||
rowEnd: parseInt(styles.gridRowEnd),
|
rowEnd: parseInt(styles.gridRowEnd),
|
||||||
colStart: parseInt(styles.gridColumnStart),
|
colStart: parseInt(styles.gridColumnStart),
|
||||||
|
@ -249,7 +252,7 @@
|
||||||
side,
|
side,
|
||||||
grid: {
|
grid: {
|
||||||
startX: e.clientX,
|
startX: e.clientX,
|
||||||
startY: e.clientY,
|
startY: e.clientY + scrollOffset(),
|
||||||
rowStart: parseInt(styles.gridRowStart),
|
rowStart: parseInt(styles.gridRowStart),
|
||||||
rowEnd: parseInt(styles.gridRowEnd),
|
rowEnd: parseInt(styles.gridRowEnd),
|
||||||
colStart: parseInt(styles.gridColumnStart),
|
colStart: parseInt(styles.gridColumnStart),
|
||||||
|
@ -295,12 +298,17 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
onMount(() => {
|
onMount(() => {
|
||||||
|
scrollElement = document.getElementsByClassName(
|
||||||
|
"screen-wrapper"
|
||||||
|
)[0] as HTMLElement
|
||||||
document.addEventListener("dragstart", onDragStart, false)
|
document.addEventListener("dragstart", onDragStart, false)
|
||||||
document.addEventListener("dragover", onDragOver, false)
|
document.addEventListener("dragover", onDragOver, false)
|
||||||
|
document.addEventListener("scroll", processEvent)
|
||||||
})
|
})
|
||||||
|
|
||||||
onDestroy(() => {
|
onDestroy(() => {
|
||||||
document.removeEventListener("dragstart", onDragStart, false)
|
document.removeEventListener("dragstart", onDragStart, false)
|
||||||
document.removeEventListener("dragover", onDragOver, false)
|
document.removeEventListener("dragover", onDragOver, false)
|
||||||
|
document.removeEventListener("scroll", processEvent)
|
||||||
})
|
})
|
||||||
</script>
|
</script>
|
||||||
|
|
Loading…
Reference in New Issue