diff --git a/frontend/admin/static/script.js b/frontend/admin/static/script.js index b1a3d61..d9704a9 100644 --- a/frontend/admin/static/script.js +++ b/frontend/admin/static/script.js @@ -7,6 +7,7 @@ const START_HOUR = 8; const END_HOUR = 20; const PIXELS_PER_MINUTE = 0.8; +let dragOffsetY = 0; let currentRangeStart = null; let scheduleItems = []; let itemIndex = new Map(); @@ -275,6 +276,8 @@ function toggleActiveItem(element) { function handleDragStart(event) { const block = event.currentTarget; block.classList.add('dragging'); + const blockRect = block.getBoundingClientRect(); + dragOffsetY = event.clientY - blockRect.top; event.dataTransfer.setData('text/plain', JSON.stringify({ id: Number(block.dataset.id), occurrenceDate: block.dataset.date @@ -295,7 +298,8 @@ async function handleEventDrop(event) { } const rect = event.currentTarget.getBoundingClientRect(); - const relativeY = Math.max(0, Math.min(rect.height, event.clientY - rect.top)); + const adjustedY = event.clientY - rect.top - dragOffsetY; + const relativeY = Math.max(0, Math.min(rect.height, adjustedY)); const minutesFromStart = Math.round((relativeY / PIXELS_PER_MINUTE) / SLOT_MINUTES) * SLOT_MINUTES; const clampedMinutes = Math.min((END_HOUR - START_HOUR) * 60 - item.duration_min, Math.max(0, minutesFromStart)); const newTime = minutesToTime(START_HOUR * 60 + clampedMinutes);