React可拖拽缩放组件react-rnd
react-rnd 是一个React 组件库,可以提供一个可调整大小与可拖拽的组件。

一、安装
使用 npm
npm i -S react-rnd
使用 yarn
yarn add react-rnd
二、使用方法
基本用法
<Rnd default={{ x: 0, y: 0, width: 320, height: 200, }} > Rnd </Rnd>
使用position和size的例子
1 <Rnd 2 size={{ width: this.state.width, height: this.state.height }} 3 position={{ x: this.state.x, y: this.state.y }} 4 onDragStop={(e, d) => { this.setState({ x: d.x, y: d.y }) }} 5 onResizeStop={(e, direction, ref, delta, position) => { 6 this.setState({ 7 width: ref.style.width, 8 height: ref.style.height, 9 ...position, 10 }); 11 }} 12 > 13 123 14 </Rnd>
三、属性
default: { x: number; y: number; width?: number | string; height?: number | string; }; 设定默认的一些属性,如初始坐标和宽高 size?: { width: (number | string), height: (number | string) }; 组件的大小,即宽度与高度 position?: { x: number, y: number }; 组件的坐标,即横坐标与纵坐标 resizeGrid?: [number, number]; 重置大小时的增量,默认为[1, 1] dragGrid?: [number, number]; 拖拽时的增量,默认为[1, 1] lockAspectRatio?: boolean | number; 锁定纵横比,可设置为布尔值或数字值,当设置为true时,组件会锁定纵横比,并且该值为组件初始宽高的比值;而设置为数字时,组件调整大小时会以该值作为纵横比来调整 enableResizing?: ?Enable; 用以设置是否可调整大小,可从组件各个方向上或整体来设置: export type Enable = { bottom?: boolean; bottomLeft?: boolean; bottomRight?: boolean; left?: boolean; right?: boolean; top?: boolean; topLeft?: boolean; topRight?: boolean; } | boolean
disableDragging?: boolean; 是否禁用拖拽 dragAxis?: 'x' | 'y' | 'both' | 'none' 设置组件的拖拽方向 bounds?: string; 组件的边界:可设置为父组件的名称或者window、body或者一个选择器的名称(需要带上符号. or #)
四、回调函数
onResizeStart?: RndResizeStartCallback; // 开始调整大小时调用
1 export type RndResizeStartCallback = ( 2 e: SyntheticMouseEvent<HTMLDivElement> | SyntheticTouchEvent<HTMLDivElement>, 3 dir: ResizeDirection, 4 refToElement: React.ElementRef<'div'>, 5 ) => void;
onResize?: RndResizeCallback; // 组件调整大小时调用
1 export type RndResizeCallback = ( 2 e: MouseEvent | TouchEvent, 3 dir: ResizeDirection, 4 refToElement: React.ElementRef<'div'>, 5 delta: ResizableDelta, 6 position: Position, 7 ) => void;
onResizeStop?: RndResizeCallback; // 组件停止调整大小时调用
1 export type RndResizeCallback = ( 2 e: MouseEvent | TouchEvent, 3 dir: ResizeDirection, 4 refToElement: React.ElementRef<'div'>, 5 delta: ResizableDelta, 6 position: Position, 7 ) => void;
onDragStart: DraggableEventHandler; // 组件开始拖拽时调用
1 type DraggableData = { 2 node: HTMLElement, 3 x: number, 4 y: number, 5 deltaX: number, deltaY: number, 6 lastX: number, lastY: number 7 }; 8 9 type DraggableEventHandler = ( 10 e: SyntheticMouseEvent | SyntheticTouchEvent, data: DraggableData, 11 ) => void | false;
onDrag: DraggableEventHandler; // 组件拖拽时调用
1 type DraggableData = { 2 node: HTMLElement, 3 x: number, 4 y: number, 5 deltaX: number, deltaY: number, 6 lastX: number, lastY: number 7 }; 8 9 type DraggableEventHandler = ( 10 e: SyntheticMouseEvent | SyntheticTouchEvent, data: DraggableData, 11 ) => void | false;
onDragStop: DraggableEventHandler; // 组件停止拖拽时调用
1 type DraggableData = { 2 node: HTMLElement, 3 x: number, 4 y: number, 5 deltaX: number, deltaY: number, 6 lastX: number, lastY: number 7 }; 8 9 type DraggableEventHandler = ( 10 e: SyntheticMouseEvent | SyntheticTouchEvent, data: DraggableData, 11 ) => void | false;
实例API
updateSize(size: { width: string | number, height: string | number })
用以调整组件的大小
updatePosition({ x: number, y: number }): void
用以调整组件的位置
allowAnyClick?: boolean
如果设置为true,则允许非左键点击拖拽
附:
github地址:https://github.com/bokuweb/react-rnd
如果仅需实现拖拽功能,无需缩放功能,也可使用 react-draggable 组件

浙公网安备 33010602011771号