22 lines
943 B
TypeScript
22 lines
943 B
TypeScript
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));
|
|
}
|