feat(frontend): cbz page/spread view math (TDD)
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
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));
|
||||
}
|
||||
Reference in New Issue
Block a user