corrigindo drag and drop dos samples na playlist
Deploy / Deploy (push) Successful in 2m17s
Details
Deploy / Deploy (push) Successful in 2m17s
Details
This commit is contained in:
parent
329afcf2d6
commit
8bccf7ea4d
|
|
@ -765,19 +765,22 @@ export function renderAudioEditor() {
|
|||
// Drag Clip (Audio apenas)
|
||||
if (clipElement && !clipElement.classList.contains("bassline-clip")) {
|
||||
const clipId = clipElement.dataset.clipId;
|
||||
if (appState.global.selectedClipId !== clipId) {
|
||||
appState.global.selectedClipId = clipId;
|
||||
newTrackContainer.querySelectorAll(".timeline-clip.selected").forEach((c) => c.classList.remove("selected"));
|
||||
clipElement.classList.add("selected");
|
||||
}
|
||||
|
||||
// 🔑 pega o clip no estado pra ter o tempo inicial real
|
||||
const clipModel = appState.audio.clips.find(c => String(c.id) === String(clipId));
|
||||
const initialStartTime = Number(clipModel?.startTimeInSeconds || 0);
|
||||
|
||||
e.preventDefault();
|
||||
const clickOffsetInClip = e.clientX - clipElement.getBoundingClientRect().left;
|
||||
const initialMouseX = e.clientX;
|
||||
const initialScrollLeft = scrollEl.scrollLeft;
|
||||
|
||||
clipElement.classList.add("dragging");
|
||||
let lastOverLane = clipElement.closest(".audio-track-lane");
|
||||
|
||||
|
||||
const onMouseMove = (moveEvent) => {
|
||||
const deltaX = moveEvent.clientX - e.clientX;
|
||||
const deltaX = moveEvent.clientX - initialMouseX;
|
||||
clipElement.style.transform = `translateX(${deltaX}px)`;
|
||||
|
||||
const overElement = document.elementFromPoint(moveEvent.clientX, moveEvent.clientY);
|
||||
const overLane = overElement ? overElement.closest(".audio-track-lane") : null;
|
||||
if (overLane && overLane !== lastOverLane) {
|
||||
|
|
@ -793,26 +796,30 @@ export function renderAudioEditor() {
|
|||
clipElement.style.transform = "";
|
||||
document.removeEventListener("mousemove", onMouseMove);
|
||||
document.removeEventListener("mouseup", onMouseUp);
|
||||
|
||||
|
||||
const finalLane = lastOverLane;
|
||||
if (!finalLane) return;
|
||||
|
||||
const newTrackId = finalLane.dataset.trackId;
|
||||
const timelineContainer = finalLane.querySelector(".timeline-container");
|
||||
const wrapperRect = timelineContainer.getBoundingClientRect();
|
||||
const newLeftPx = upEvent.clientX - wrapperRect.left - clickOffsetInClip + scrollEl.scrollLeft;
|
||||
const constrainedLeftPx = Math.max(0, newLeftPx);
|
||||
let newStartTime = constrainedLeftPx / currentPixelsPerSecond;
|
||||
|
||||
// ✅ delta do mouse + delta de scroll durante o drag (se houver)
|
||||
const deltaX = (upEvent.clientX - initialMouseX) + (scrollEl.scrollLeft - initialScrollLeft);
|
||||
|
||||
let newStartTime = initialStartTime + (deltaX / currentPixelsPerSecond);
|
||||
newStartTime = Math.max(0, newStartTime);
|
||||
newStartTime = quantizeTime(newStartTime);
|
||||
|
||||
|
||||
updateAudioClipProperties(clipId, { trackId: newTrackId, startTimeInSeconds: newStartTime });
|
||||
sendActionSafe({ type: "UPDATE_AUDIO_CLIP", clipId, props: { trackId: newTrackId, startTimeInSeconds: newStartTime } });
|
||||
renderAudioEditor();
|
||||
};
|
||||
|
||||
document.addEventListener("mousemove", onMouseMove);
|
||||
document.addEventListener("mouseup", onMouseUp);
|
||||
return;
|
||||
}
|
||||
|
||||
|
||||
// Seek na Pista
|
||||
const timelineContainer = e.target.closest(".timeline-container");
|
||||
if (timelineContainer) {
|
||||
|
|
|
|||
Loading…
Reference in New Issue