diff --git a/src/components/CalendarView.vue b/src/components/CalendarView.vue index 09f21cc..7cbbc42 100644 --- a/src/components/CalendarView.vue +++ b/src/components/CalendarView.vue @@ -135,6 +135,7 @@ const isWeekColDragging = ref(false) let weekColDragStartScroll = 0 let weekColAccum = 0 let weekColPointerLocked = false +let weekColLastY = 0 function scheduleRebuild(reason) { if (pendingRebuild) return @@ -528,6 +529,7 @@ function handleWeekColMouseDown(e) { isWeekColDragging.value = true weekColDragStartScroll = viewport.value.scrollTop weekColAccum = 0 + weekColLastY = e.clientY if (viewport.value.requestPointerLock) viewport.value.requestPointerLock() window.addEventListener('mousemove', handleWeekColMouseMove, { passive: false }) window.addEventListener('mouseup', handleWeekColMouseUp, { passive: false }) @@ -537,11 +539,17 @@ function handleWeekColMouseDown(e) { function handleWeekColMouseMove(e) { if (!isWeekColDragging.value || !viewport.value) return - const dy = weekColPointerLocked ? e.movementY : e.clientY // movementY if locked + let dy + if (weekColPointerLocked) { + dy = e.movementY + } else { + dy = e.clientY - weekColLastY + weekColLastY = e.clientY + } weekColAccum += dy let desired = weekColDragStartScroll - weekColAccum if (desired < 0) desired = 0 - const maxScroll = Math.max(0, contentHeight.value - viewportHeight.value) + const maxScroll = Math.max(0, contentHeight.value - viewportHeight.vale) if (desired > maxScroll) desired = maxScroll viewport.value.scrollTop = desired e.preventDefault()