js-web-screen-shot
Version:
web端自定义截屏插件(原生JS版)
111 lines (110 loc) • 3.75 kB
TypeScript
import type { CropBoxBounds, CropBoxPreset } from "../../../lib/type/components/cropBox";
import type { ToolVisibilityMap, ToolPlacement, UserToolbarItem } from "../../../lib/type/components/toolbar";
import type { CanvasEventCallbacks, RightClickEventConfig } from "../../../lib/type/components/events";
import type { CanvasElementSnapshot } from "../../../lib/type/components/canvas";
import type { CustomCanvasElementAdapter } from "../../../lib/type/components/customElement";
export type HiddenScrollbarOptions = {
state: boolean;
color?: string;
fillWidth?: number;
fillHeight?: number;
fillState?: boolean;
};
export type ViewportOffset = {
top: number;
left: number;
};
export type ImageSize = {
w: number;
h: number;
};
export type ScreenShotCaptureSourceOption = "display-media" | "injected-stream" | "dom" | "snapdom" | "image";
export type ScreenShotRenderMode = "browser-frame" | "window-frame";
export type ScreenShotCursorCapture = "always" | "motion" | "never";
export type SnapDomCaptureOptions = Record<string, unknown>;
export type SnapDomRenderer = {
toCanvas: (element: HTMLElement, options?: SnapDomCaptureOptions) => Promise<HTMLCanvasElement>;
};
export type ScreenShotCaptureOptions = {
source?: ScreenShotCaptureSourceOption;
render?: ScreenShotRenderMode;
cursor?: ScreenShotCursorCapture;
stream?: MediaStream;
imageSrc?: string;
snapdom?: SnapDomRenderer;
snapdomOptions?: SnapDomCaptureOptions;
};
export type CanvasExportType = "image/png" | "image/jpeg" | "image/webp";
export type CanvasExportOptions = {
type?: CanvasExportType;
quality?: number;
};
export type ScreenShotOptions = {
x?: number;
y?: number;
capture?: ScreenShotCaptureOptions;
enableWebRtc?: boolean;
screenFlow?: MediaStream;
level?: number;
menuBarHeight?: number;
canvasWidth?: number;
canvasHeight?: number;
completeCallback?: (imgInfo: {
base64: string;
cutInfo: CropBoxBounds;
}) => void;
closeCallback?: () => void;
h2cImgLoadErrCallback?: (err: Event & {
imgUrl: string;
}) => void;
triggerCallback?: (res: {
code: number;
msg: string;
displaySurface: string | null;
displayLabel: string | null;
}) => void;
cancelCallback?: (res: {
code: number;
msg: string;
errorInfo: string;
}) => void;
saveCallback?: (code: number, msg: string, base64: string) => void;
position?: Partial<ViewportOffset>;
clickCutFullScreen?: boolean;
hiddenToolIco?: ToolVisibilityMap;
showScreenData?: boolean;
imgSrc?: string;
loadCrossImg?: boolean;
proxyUrl?: string;
useCORS?: boolean;
screenShotDom?: HTMLElement | HTMLDivElement | HTMLCanvasElement;
cropBoxInfo?: CropBoxPreset;
wrcReplyTime?: number;
wrcImgPosition?: CropBoxPreset;
noScroll?: boolean;
maskColor?: {
r: number;
g: number;
b: number;
a: number;
};
toolPosition?: ToolPlacement;
writeBase64?: boolean;
exportOptions?: CanvasExportOptions;
hiddenScrollBar?: HiddenScrollbarOptions;
wrcWindowMode?: boolean;
customRightClickEvent?: RightClickEventConfig;
cutBoxBdColor?: string;
maxUndoNum?: number;
useRatioArrow?: boolean;
imgAutoFit?: boolean;
useCustomImgSize?: boolean;
customImgSize?: ImageSize;
saveImgTitle?: string;
destroyContainer?: boolean;
userToolbar?: Array<UserToolbarItem>;
canvasEvents?: CanvasEventCallbacks;
customElementAdapters?: Array<CustomCanvasElementAdapter>;
h2cIgnoreElementsCallback?: (element: Element) => boolean;
canvasElements?: Array<CanvasElementSnapshot>;
};