types.ts 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. import React from 'react';
  2. /**
  3. * 图片 item 类型
  4. */
  5. export type dataType = {
  6. // 唯一标识
  7. key?: string;
  8. // 图片地址
  9. src: string;
  10. // 原触发 ref
  11. originRef: HTMLElement | null;
  12. // 图片介绍
  13. intro?: React.ReactNode;
  14. };
  15. type overlayRenderProps = {
  16. // 图片列表
  17. images: dataType[];
  18. // 图片当前索引
  19. index: number;
  20. // 可见
  21. visible: boolean;
  22. // 关闭事件
  23. onClose: (evt?: React.MouseEvent | React.TouchEvent) => void;
  24. // 索引改变回调
  25. onIndexChange: (photoIndex: number) => void;
  26. // 覆盖物可见度
  27. overlayVisible: boolean;
  28. };
  29. export interface IPhotoProviderBase {
  30. // 背景可点击关闭,默认 true
  31. maskClosable?: boolean;
  32. // 图片点击可关闭,默认 false
  33. photoClosable?: boolean;
  34. // 导航条 visible,默认 true
  35. bannerVisible?: boolean;
  36. // 简介 visible,默认 true
  37. introVisible?: boolean;
  38. // 自定义渲染
  39. overlayRender?: (overlayProps: overlayRenderProps) => React.ReactNode;
  40. // className
  41. className?: string;
  42. // 遮罩 className
  43. maskClassName?: string;
  44. // 图片容器 className
  45. viewClassName?: string;
  46. // 图片 className
  47. imageClassName?: string;
  48. // 自定义 loading
  49. loadingElement?: JSX.Element;
  50. // 加载失败 Element
  51. brokenElement?: JSX.Element;
  52. }
  53. export type ReachMoveFunction = (
  54. reachState: ReachTypeEnum,
  55. clientX: number,
  56. clientY: number,
  57. scale?: number,
  58. ) => void;
  59. export type ReachFunction = (clientX: number, clientY: number) => void;
  60. export type PhotoTapFunction = (clientX: number, clientY: number) => void;
  61. /**
  62. * 边缘超出状态
  63. */
  64. export enum CloseEdgeEnum {
  65. Normal, // 正常滑动
  66. Small, // 小于屏幕宽度
  67. Before, // 抵触左边/上边
  68. After, // 抵触右边/下边
  69. }
  70. /**
  71. * 边缘触发状态
  72. */
  73. export enum ReachTypeEnum {
  74. Normal, // 未触发
  75. XReach, // x 轴
  76. YReach, // y 轴
  77. }
  78. /**
  79. * 初始响应状态
  80. */
  81. export enum TouchStartEnum {
  82. Normal, // 未触发
  83. X, // X 轴优先
  84. YPush, // Y 轴往上
  85. YPull, // Y 轴往下
  86. }
  87. /**
  88. * 动画类型
  89. */
  90. export enum ShowAnimateEnum {
  91. None, // 无
  92. In, // 进入
  93. Out, // 离开
  94. }
  95. /**
  96. * 触发源位置
  97. */
  98. export type OriginRectType = {
  99. clientX: number;
  100. clientY: number;
  101. } | undefined;