From f0298bcb63796a4d37aa671b29f7807cf4378d52 Mon Sep 17 00:00:00 2001 From: Cui Hao Date: Thu, 25 Jun 2026 23:41:47 +0800 Subject: [PATCH] =?UTF-8?q?fix(timeline):=20hitTest=20=E8=BF=87=E6=BB=A4?= =?UTF-8?q?=E9=9A=90=E8=97=8F=E8=BD=A8=E9=81=93=EF=BC=8C=E9=9A=90=E8=97=8F?= =?UTF-8?q?=E8=BD=A8=E7=89=87=E6=AE=B5=E4=B8=8D=E5=8F=AF=E7=82=B9=E9=80=89?= =?UTF-8?q?/=E6=8B=96=E6=8B=BD/=E6=A1=86=E9=80=89=20(#146)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- web/src/components/timeline/hitTest.ts | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/web/src/components/timeline/hitTest.ts b/web/src/components/timeline/hitTest.ts index a5008d8..bb88494 100644 --- a/web/src/components/timeline/hitTest.ts +++ b/web/src/components/timeline/hitTest.ts @@ -29,6 +29,8 @@ export function hitTestClip( ): ClipHit | null { for (let ti = 0; ti < timeline.tracks.length; ti++) { const track = timeline.tracks[ti]; + // 隐藏轨道不参与命中测试(上游一致:hidden track 的片段不可被点选/拖拽) + if (track.hidden) continue; for (let ci = 0; ci < track.clips.length; ci++) { const clip = track.clips[ci]; const rect = clipRect(timeline, ti, clip, pixelsPerFrame, trackHeights); @@ -83,6 +85,8 @@ export function clipsInRect( const maxY = Math.max(y0, y1); const out = new Set(); for (let ti = 0; ti < timeline.tracks.length; ti++) { + // 隐藏轨道不参与框选(与 hitTestClip 一致) + if (timeline.tracks[ti].hidden) continue; for (const clip of timeline.tracks[ti].clips) { const rect = clipRect(timeline, ti, clip, pixelsPerFrame, trackHeights); const intersects =