fix: cross-track drag computes target from mouse Y position
Replace hoveredTrackIdRef with Y-position calculation through track heights from prev state. Works reliably during drag.
This commit is contained in:
+11
-4
@@ -12049,15 +12049,22 @@ const App = () => {
|
||||
wrapper.scrollLeft = Math.max(0, itemPx - keepMargin);
|
||||
setCanvasRedrawCount(n => n + 1);
|
||||
}
|
||||
var targetTrackId = hoveredTrackIdRef.current || drag.trackId;
|
||||
updateActiveTracks(prev => {
|
||||
// Build trackId->index map from live prev state
|
||||
// Compute target track from mouse Y position relative to timeline wrapper
|
||||
var trkIds = prev.map(function(tr) { return tr.id; });
|
||||
var baseIdx = trkIds.indexOf(drag.trackId);
|
||||
if (baseIdx < 0) baseIdx = 0;
|
||||
var targetIdx = trkIds.indexOf(targetTrackId);
|
||||
if (targetIdx < 0) targetIdx = prev.length - 1;
|
||||
var trackTop = 0;
|
||||
var targetIdx = -1;
|
||||
var mouseY = e.clientY - rect.top;
|
||||
for (var ti = 0; ti < prev.length; ti++) {
|
||||
var tH = prev[ti].height || (prev[ti].isArmed ? 164 : 140);
|
||||
if (mouseY >= trackTop && mouseY < trackTop + tH) { targetIdx = ti; break; }
|
||||
trackTop += tH;
|
||||
}
|
||||
if (targetIdx < 0) targetIdx = mouseY < trackTop ? 0 : prev.length - 1;
|
||||
if (targetIdx < 0) targetIdx = 0;
|
||||
var targetTrackId = prev[targetIdx].id;
|
||||
var crossOffset = targetIdx - baseIdx;
|
||||
let movedItem = null;
|
||||
for (let track of prev) {
|
||||
|
||||
Reference in New Issue
Block a user