mouse-selection
Version:
A mouse frame selection plugin using JavaScript
129 lines (128 loc) • 4.04 kB
TypeScript
declare type DOMType = HTMLElement | HTMLDocument | null;
interface SelectionRects {
selectionPageRect?: CustomRect;
selectionDOMRect?: CustomRect;
}
declare type RefitedMouseEvent = MouseEvent & SelectionRects;
interface MouseSelectionOptions {
className?: string;
scale?: number;
zIndex?: number;
onMousemove?: (event: RefitedMouseEvent) => void;
onMousedown?: (event: MouseEvent) => void;
onMouseup?: (event: MouseEvent) => void;
disabled?: () => boolean;
stopPropagation?: boolean;
stopSelector?: string;
notSetWrapPosition?: boolean;
}
interface CustomRect {
left: number;
top: number;
width: number;
height: number;
right: number;
bottom: number;
}
interface PositionSizeMap {
left: number;
top: number;
width: number;
height: number;
}
declare class MouseSelection {
rectangleElement: HTMLElement;
targetDom: DOMType;
domRect: CustomRect | DOMRect;
selectionPagePositionRect: CustomRect;
selectionDOMPositionRect: CustomRect;
config?: MouseSelectionOptions;
private startX;
private startY;
private scale;
private moving;
private readonly RectangleElementClassName;
private wrapDOM;
constructor(domOrConfig?: DOMType | MouseSelectionOptions, config?: MouseSelectionOptions);
/**
* @description 获取框选元素以作用DOM为准的偏移和尺寸信息
* @param left 距离页面左侧距离
* @param top 距离页面顶部距离
* @param width 宽度
* @param height 高度
*/
getSelectionPagePosition(x: number, y: number): CustomRect;
/**
* @description 获取矩形框选元素以传入的DOM为准的偏移和尺寸信息
* @param selectionPagePositionRect getSelectionPagePosition返回的值
*/
getSelectionDOMPosition(selectionPagePositionRect: CustomRect): CustomRect;
/**
* @description 工具方法,传入一个包含left/top/width/height字段的对象,返回这个参数描述的矩形是否与框选矩形相交
* @param positionSizeMap {left,top,width,height} 要判断的
*/
isInTheSelection({ left, top, width, height }: PositionSizeMap): boolean;
/**
* @description 注销方法
*/
destroy(): void;
/**
* @description 如果未明确设置notSetWrapPosition为true,则给作用容器加position: relative属性
*/
private _setWrapDomPositionStyle;
/**
* @description 在document.body中创建矩形框选元素
* 不管事件绑定到哪个DOM,矩形框选元素都添加到document.body
* @returns 矩形框选元素
*/
private _createRectangleElement;
/**
* @description 设置鼠标按下时起始坐标
* @param x
* @param y
*/
private _setStartPosition;
/**
* @description 绑定mousedown事件
* @param dom 要绑定事件的dom
*/
private _addMousedownListener;
/**
* @description 解绑mousedown事件
* @param dom 要解绑事件的dom
*/
private _removeMousedownListener;
/**
* @description 获取DOM的Rect信息,如果是document,只返回6个值
* @param dom 要获取Rect信息的dom
*/
private _getDOMRect;
/**
* @description mousedown事件回调
* @param event 鼠标事件对象
*/
private _selectStart;
/**
* @description mousemove事件回调
* @param event 鼠标事件对象
*/
private _selecting;
/**
* @description mouseup事件回调
* @param event 鼠标事件对象
*/
private _selectEnd;
/**
* @description 设置矩形框选元素样式
* @param props CSS属性名
* @param value CSS属性值
*/
private _setRectangleElementStyle;
/**
* @description 更新矩形框选元素样式
* @param currentX 当前鼠标event.pageX值
* @param currentY 当前鼠标event.pageY值
*/
private _updateRectangleElementStyle;
}
export default MouseSelection;