fs-virtual-waterfall
Version:
Vue3 虚拟瀑布流组件
74 lines (73 loc) • 1.71 kB
TypeScript
import { CSSProperties } from '../../node_modules/vue';
export interface IVirtuallistProps<T> {
itemHeight: number;
loading: boolean;
loadingText: string;
loadingBg: string;
dataSource: T[];
}
export interface IEstimatedListProps<T> {
loading: boolean;
estimatedHeight: number;
dataSource: T[];
}
export interface IPosInfo {
index: number;
top: number;
bottom: number;
height: number;
dHeight: number;
}
export interface IWaterFallProps {
gap: number;
column: number;
pageSize: number;
request: (page: number, pageSize: number) => Promise<IImageItem[]>;
}
export interface IImageItem {
id: string | number;
url: string;
width: number;
height: number;
[key: string]: any;
}
export interface IVirtualWaterFallProps {
data: IDataItem[];
loading?: boolean;
hasMore?: boolean;
column?: number;
columnItemCount?: number;
gap?: number;
hoverScale?: number;
themeMode?: 'light' | 'dark' | 'auto';
cardStyle?: 'rounded' | 'square';
scrollBehavior?: 'smooth' | 'auto';
emptyText?: string;
initialHeight?: number;
loadMoreThreshold?: number;
debug?: boolean;
}
export interface IColumnQueue {
list: Array<IRenderItem>;
height: number;
}
export interface IItemRect {
width: number;
height: number;
}
export interface IRenderItem {
item: IDataItem;
y: number;
h: number;
style: CSSProperties;
}
export interface IDataItem {
id: number | string;
width: number;
height: number;
[key: string]: any;
}
export type FsVirtualWaterfallReuqest = (page: number, pageSize: number) => Promise<{
total: number;
list: IDataItem[];
}>;