Server web UI: make photo-card dragging actually feel like dragging
Build and push server image / build-and-push (push) Successful in 34s
Build and push server image / build-and-push (push) Successful in 34s
The card being dragged never moved -- it just faded in place while a static outline highlighted whatever was underneath the finger. Now the card tracks the pointer 1:1 (translate + a slight scale-up "lift"), gets a stronger shadow while airborne, and leaves its grid slot looking like an empty gap until dropped (transform doesn't remove it from layout flow, so the reserved space stays put -- no reflow needed until drop). pointer-events:none while dragging so elementFromPoint's drop-target hit-test sees through to the card underneath instead of hitting the translated one. Also: a short vibration tick when the touch hold-to-arm fires and another on a successful drop (Chrome/Android only, iOS Safari has no Vibration API -- harmless no-op there), and trimmed the arm delay from 350ms to 250ms now that there's actual feedback confirming the hold registered.
This commit is contained in:
@@ -261,8 +261,20 @@
|
||||
}
|
||||
.photo-card:hover { box-shadow: var(--shadow-hover); transform: translateY(-1px); }
|
||||
.photo-card:active { cursor: grabbing; }
|
||||
.photo-card.dragging { opacity: 0.35; }
|
||||
.photo-card.drag-armed { box-shadow: 0 0 0 3px var(--focus-ring) inset; }
|
||||
.photo-card.drag-armed {
|
||||
box-shadow: 0 0 0 3px var(--focus-ring) inset;
|
||||
transform: scale(0.97);
|
||||
}
|
||||
/* No transform transition here -- the JS drives transform on every
|
||||
pointermove to track the finger 1:1, and the .15s base transition
|
||||
would otherwise make it visibly lag behind a fast swipe. */
|
||||
.photo-card.dragging {
|
||||
z-index: 20;
|
||||
box-shadow: 0 16px 32px rgba(0, 0, 0, 0.35);
|
||||
transition: box-shadow .15s ease;
|
||||
pointer-events: none; /* so elementFromPoint hits the card underneath, not this one */
|
||||
cursor: grabbing;
|
||||
}
|
||||
.photo-card.drag-over { outline: 3px solid var(--accent); outline-offset: -3px; }
|
||||
.photo-card img { width: 100%; height: 100%; object-fit: cover; display: block; pointer-events: none; }
|
||||
.photo-card .badge { position: absolute; top: 6px; left: 6px; background: var(--overlay); color: white; font-size: 10px; padding: 2px 6px; border-radius: 4px; }
|
||||
|
||||
Reference in New Issue
Block a user