This commit is contained in:
th committed 2026-04-19 19:32:23 +02:00
1 parent 94e9846c13
commit e4aa0dce86
11 files changed
+2227 -32

No files matched your search

+26
View File
@@ -0,0 +1,26 @@
export interface SnapOptions {
enabled: boolean
pxPerSec: number
pixelThreshold: number
duration: number
}
export function snapToCandidates(
t: number,
candidates: readonly number[],
opts: SnapOptions,
): number {
if (!opts.enabled) return t
if (opts.pxPerSec <= 0) return t
const thresholdTime = opts.pixelThreshold / opts.pxPerSec
let best = t
let bestDist = thresholdTime
for (const kt of candidates) {
const d = Math.abs(kt - t)
if (d <= bestDist) {
bestDist = d
best = kt
}
}
return Math.max(0, Math.min(opts.duration, best))
}