export type PageMode = "page" | "spread"; export function viewCount(count: number, mode: PageMode): number { return mode === "page" ? count : Math.ceil(count / 2); } export function pageIndexToView(i: number, mode: PageMode): number { return mode === "page" ? i : Math.floor(i / 2); } export function viewToPageIndex(v: number, mode: PageMode): number { return mode === "page" ? v : v * 2; } /** 一个 spread 视图要渲染的页,按显示顺序(LTR=[左,右];RTL=[右,左] 即先读页在前)。 */ export function spreadPages(first: number, count: number, rtl: boolean): number[] { const pages = [first, ...(first + 1 < count ? [first + 1] : [])]; return rtl ? [...pages].reverse() : pages; } /** 翻一屏/页;rtl 时方向翻转;越界钳制。 */ export function turnView(v: number, d: number, rtl: boolean, views: number): number { const step = rtl ? -d : d; return Math.max(0, Math.min(views - 1, v + step)); }