import { IStoreState } from '../../index.data'; // 获取冻结行的高度 export function getFrozenHeight(state: IStoreState) { let h = 0; for (let i = 0; i < state.freezeAt.i + 1; i++) { const rowId = state.rows[i].id; h += state.rowDimensions[rowId].height; } return h; } // 获取冻结列的宽度 export function getFrozenWidth(state: IStoreState) { let w = 0; for (let j = 0; j < state.freezeAt.j + 1; j++) { const colId = state.columns[j].id!; w += state.colDimensions[colId].width; } return w; } /** * 获取某行顶部的有效高度, 排除collapsed和frozen * 用途: 若scrollY = 此高度, 则当前行将居顶 */ export function getRowTop_exceptCollapsedAndFrozen( state: IStoreState, collapsedRowFlags: boolean[], rowIdx: number, ): number { const { freezeAt, rowDimensions, rows } = state; let result = 0; for (let i = freezeAt.i + 1; i < rowIdx; i++) { if (!collapsedRowFlags[i]) { const rowId = rows[i].id; result += rowDimensions[rowId].height; } } return result; } /** * 获取某列左侧的有效宽度, 排除frozen * 用途: 若scrollYX = 此宽度, 则当前列将居左 */ export function getColumnLeft_exceptFrozen(state: IStoreState, colIdx: number): number { const { freezeAt, colDimensions, columns } = state; let result = 0; for (let j = freezeAt.j + 1; j < colIdx; j++) { const colId = columns[j].id!; result += colDimensions[colId].width; } return result; }