UNPKG

@opensig/opendesign

Version:

62 lines (61 loc) 2.06 kB
import { ComputedRef } from 'vue'; import { Alignment } from '../types'; /** * @description 轴选择器配置对象 */ export interface AxisSelector { /** 获取元素的滚动偏移量 */ getScroll: (el: HTMLElement) => number; /** 设置元素的滚动偏移量 */ setScroll: (el: HTMLElement, val: number) => void; /** 获取元素的主轴尺寸 */ getAxisSize: (el: HTMLElement) => number; /** 获取元素的主轴滚动范围 */ getScrollSize: (el: HTMLElement) => number; /** 获取元素的主轴可视尺寸 */ getClientSize: (el: HTMLElement) => number; /** 调用 scrollTo 并在正确的轴上设置偏移量 */ scrollToPos: (el: HTMLElement, pos: number, behavior: ScrollBehavior) => void; } /** * @description 根据布局方向创建轴选择器 * @param isHorizontal 是否水平布局 * @returns 轴选择器方法对象 */ export declare function createAxisSelector(isHorizontal: ComputedRef<boolean>): AxisSelector; /** * @description 尺寸信息配置对象 */ export interface SizeInfo { /** 容器主轴尺寸 */ containerSize: number; /** 目标项的尺寸 */ itemSize: number; } /** * @description 计算滚动目标位置(对齐策略) * @param itemTop 目标项的 top 偏移量 * @param align 对齐方式 * @param sizes 尺寸信息 * @returns 最终滚动目标位置 */ export declare function calculateScrollTarget(itemTop: number, align: Alignment, sizes: SizeInfo): number; /** * @description 视口位置信息配置对象 */ export interface ViewportInfo { /** 当前滚动位置 */ currentScroll: number; /** 目标项 top */ itemTop: number; /** 目标项尺寸 */ itemSize: number; /** 容器尺寸 */ containerSize: number; } /** * @description 解析 'nearest' 对齐方式为具体对齐 * @param viewport 视口位置信息 * @returns 解析后的对齐方式,或 null 表示已在视口内无需滚动 */ export declare function resolveNearestAlign(viewport: ViewportInfo): Alignment | null;