@likg/magnifier
Version:
153 lines (152 loc) • 3.77 kB
TypeScript
import './index.css';
type Size = {
width: number;
height: number;
};
export interface MagnifierOptions {
/** 放大镜初始尺寸,默认值200x200 */
initialSize?: Size;
/** 放大镜最小尺寸,默认值500x500 */
minSize?: Size;
/** 放大镜最大尺寸,默认值100x100 */
maxSize?: Size;
/** 四周触发拖拽缩放的间距,默认值 20 */
resizeSpacing?: number;
/** 缩放比例,默认值 1 */
scaleRatio?: number;
/** 边框颜色,默认值 #7B68EE */
borderColor?: string;
/** 是否允许跨源图像污染画布 */
allowTaint?: boolean;
/** 跨域地址 */
useCORS?: boolean;
proxy?: string;
/** 调试模式 */
debug?: boolean;
/** 异常处理 */
onError?: (error: Error) => void;
}
export default class Magnifier {
/** 放大镜初始尺寸,默认值200x200 */
private initialSize;
/** 放大镜最小尺寸,默认值500x500 */
private minSize;
/** 放大镜最大尺寸,默认值100x100 */
private maxSize;
/** 四周触发拖拽缩放的间距,默认值 20 */
private resizeSpacing;
/** 缩放比例,默认值 1 */
private scaleRatio;
/** 边框颜色,默认值 #7B68EE */
private borderColor;
/** 跨域地址 */
private allowTaint?;
private useCORS?;
private proxy?;
/** 调试模式(显示边框) */
private debug;
private onError?;
/** 类名前缀 */
private prefixCls;
/** 标识当前是否激活缩放状态 */
private isResizing;
/** 标识是否从放大镜【左侧】/【顶部】激活缩放状态,用于判断是否需要更新位置 */
private isResizeTopLeft;
/** 标识当前是否激活拖拽状态 */
private isDragging;
/** 记录放大镜拖拽时的坐标 */
private originalPoint;
/** 记录放大镜拖拽时的尺寸 */
private originalSize;
/** 记录放大镜拖拽时的偏移位置 */
private originalOffset;
/** 容器元素 */
private container;
/** 加载元素 */
private loadingEl;
/** 放大镜 */
private magnifier;
/** 拖拽区域 */
private dragBox;
/** 裁剪区域 */
private cropBox;
/** 缩放图片 */
private scaleImg;
/** 屏幕截图 */
private screenshots;
/**
* 构造函数
* @param {MagnifierOptions} options 可选项
*/
constructor(options?: MagnifierOptions);
/**
* 挂载放大镜(激活)
*/
mount: () => void;
/**
* 销毁放大镜(失活)
*/
destroy: () => void;
/**
* 下载屏幕截图(主要用于测试)
* @param canvas
*/
private _downloadScreenshots;
/**
* 计算放大镜初始位置(屏幕正中间)
*/
private _calcMagnifierPosition;
/**
* 计算裁剪区域初始位置(屏幕正中间)
* @returns
*/
private _calcCropBoxPosition;
/**
* 获取屏幕截图
* @returns
*/
private _getScreenshots;
/**
* 构建必要元素
*/
private _createElement;
/**
* 更新放大镜显示内容
* @returns
*/
private _updateScaleImg;
/**
* 开始拖拽
* @param event
* @returns
*/
private _onDragStart;
/**
* 拖拽中
* @param event
* @returns
*/
private _onDragging;
/**
* 拖拽结束
* @param event
*/
private _onDragEnd;
/**
* 开始缩放
* @param event
* @returns
*/
private _onResizeStart;
/**
* 缩放中
* @param event
* @returns
*/
private _onResizing;
/**
* 缩放结束
*/
private _onReszieEnd;
}
export {};