1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/mirrors-react-rnd

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

Изменяемый размер и возможность перетаскивания компонента для React.

A resizable and draggable component for React.

Build Status Build Status

Table of Contents

Screenshot

https://codesandbox.io/s/xpm699v4lp

Live Demo

Storybook

Storybook

CodeSandbox

Edit y3997qply9
CodeSandbox(with default)
CodeSandbox(with size and position)
CodeSandbox(with typescript)
CodeSandbox(with hooks)

Install

  • use npm
npm i -S react-rnd
  • use yarn
yarn add react-rnd

Usage

Пример с default

<Rnd
  default={{
    x: 0,
    y: 0,
    width: 320,
    height: 200,
  }}
>
  Rnd
</Rnd>

Пример с position и size

<Rnd
  size={{ width: this.state.width,  height: this.state.height }}
  position={{ x: this.state.x, y: this.state.y }}
  onDragStop={(e, d) => { this.setState({ x: d.x, y: d.y }) }}
  onResizeStop={(e, direction, ref, delta, position) => {
    this.setState({
      width: ref.style.width,
      height: ref.style.height,
      ...position,
    });
  }}
>
  001
</Rnd>

Props

default: { x: number; y: number; width?: number | string; height?: number | string; };

Свойство width и height используется для установки размера компонента по умолчанию. Например, можно установить 300, '300px', 50%. Если опущено, устанавливается 'auto'.

Свойство x и y используется для установки положения компонента по умолчанию.

size?: { width: (number | string), height: (number | string) };

Свойство size используется для установки размера компонента. Например, можно установить 300, '300px', 50%.

Используйте size, если вам нужно самостоятельно управлять состоянием размера.

position?: { x: number, y: number };

Свойство position используется для установки позиции компонента. Используйте position, если вам необходимо самостоятельно контролировать состояние размера.

см. следующий пример.

<Rnd
  size={{ width: this.state.width,  height: this.state.height }}
  position={{ x: this.state.x, y: this.state.y }}
  onDragStop={(e, d) => { this.setState({ x: d.x, y: d.y }) }}
  onResize={(e, direction, ref, delta, position) => {
    this.setState({
      width: ref.offsetWidth,
      height: ref.offsetHeight,
      ...position,
    });
  }}
>
  001
</Rnd>

className?: string;

Свойство className используется для задания пользовательского className компонента.

style?: { [key: string]: string };

Свойство style используется для задания пользовательского стиля компонента.

minWidth?: number | string;

Свойство… minWidth свойство используется для установки минимальной ширины компонента. Например, можно установить 300, '300px', 50%.

minHeight?: number | string;

Свойство minHeight используется для установки минимальной высоты компонента. Например, можно установить 300, '300px', 50%.

maxWidth?: number | string;

Свойство maxWidth используется для установки максимальной ширины компонента. Например, можно установить 300, '300px', 50%.

maxHeight?: number | string;

Свойство maxHeight используется для установки максимальной высоты компонента. Например, можно установить 300, '300px', 50%.

resizeGrid?: [number, number];

Свойство resizeGrid используется для указания приращений, к которым должно привязываться изменение размера. По умолчанию [1, 1].

dragGrid?: [number, number];

Свойство dragGrid используется для указания приращений, к которым должно привязываться перемещение. По умолчанию [1, 1].

lockAspectRatio?: boolean | number;

Свойство lockAspectRatio используется для блокировки соотношения сторон. Установите значение true, чтобы заблокировать соотношение сторон на основе исходного размера. Установите числовое значение, чтобы зафиксировать конкретное соотношение сторон (например, 16/9). Если установлено числовое значение, убедитесь, что вы установили начальную высоту/ширину с правильным соотношением сторон. Если не указано, установите false.

lockAspectRatioExtraWidth?: number;

Свойство lockAspectRatioExtraWidth позволяет компоненту с изменяемым размером сохранять соотношение сторон плюс дополнительную ширину. Например, видео может отображаться в формате 16:9 с боковой панелью шириной 50 пикселей. Если не указано, установите 0.

scale?: number;

Указывает масштаб холста, который вы перетаскиваете или изменяете размер этого элемента. Это позволяет, например, получить правильные дельты перетаскивания / изменения размера, когда вы увеличиваете или уменьшаете масштаб с помощью преобразования или матрицы в родительском элементе этого элемента. Если не указано, установите значение 1.

lockAspectRatioExtraHeight?: number;

Свойство lockAspectRatioExtraHeight позволяет компоненту с изменяемым размером сохранять соотношение сторон плюс дополнительная высота. Например, видео может отображаться в соотношении сторон 16:9 с заголовком высотой 50 пикселей. Если не указано, установите 0.

dragHandleClassName?: string;

Задаёт селектор, который будет использоваться в качестве дескриптора, инициирующего перетаскивание. Пример: handle.

resizeHandleStyles?: HandleStyles;

Свойство resizeHandleStyles используется для переопределения стиля одного или нескольких дескрипторов изменения размера. Только указанная ось будет иметь заменённый стиль дескриптора. Если вы укажете значение для right, оно полностью заменит стили для дескриптора изменения размера справа, но другие дескрипторы по-прежнему будут использовать стили по умолчанию.

export type HandleStyles = {
  bottom?: React.CSSProperties,
  bottomLeft?: React.CSSProperties,
  bottomRight?: React.CSSProperties,
  left?: React.CSSProperties,
  right?: React.CSSProperties,
  top?: React.CSSProperties,
  topLeft?: React.CSSProperties,
  topRight?: React.CSSProperties
}

resizeHandleClasses?: HandleClasses;

Свойство resizeHandleClasses используется для задания className одного или нескольких дескрипторов изменения размера.

type HandleClasses = {
  bottom?: string;
  bottomLeft?: string;
  bottomRight?: string;
  left?: string;
  right?: string;
  top?: string;
  topLeft?: string;
  topRight?: string
}

resizeHandleComponent?: HandleCompoent;

Свойство resizeHandleComponent позволяет передать пользовательский компонент React в качестве дескриптора изменения размера.

type HandleComponent = {
  top?: React.ReactElement<any>;
  right?: React.ReactElement<any>;
  bottom?: React.ReactElement<any>;
  left?: React.ReactElement<any>;
  topRight?: React.ReactElement<any>;
  bottomRight?: React.ReactElement<any>;
  bottomLeft?: React.ReactElement<any>;
  topLeft?: React.ReactElement<any>
}

resizeHandleWrapperClass?: string;

Свойство resizeHandleWrapperClass используется для задания имени класса css для элемента оболочки дескриптора изменения размера (span).

resizeHandleWrapperStyle?: Style;

Свойство resizeHandleWrapperStyle используется для задания стиля css для элемента оболочки дескриптора изменения размера (span).

enableResizing?: ?Enable;

Свойство enableResizing используется для включения возможности изменения размера. Разрешение компонента.

Разрешение изменения размера в направлениях top, right, bottom, left, topRight, bottomRight, bottomLeft, topLeft. Если опущено, все изменения размера разрешены. Если вы хотите разрешить изменение размера только вправо, установите { top:false, right:true, bottom:false, left:false, topRight:false, bottomRight:false, bottomLeft:false, topLeft:false }.

export type Enable = {
  bottom?: boolean;
  bottomLeft?: boolean;
  bottomRight?: boolean;
  left?: boolean;
  right?: boolean;
  top?: boolean;
  topLeft?: boolean;
  topRight?: boolean;
} | boolean

disableDragging?: boolean;

Свойство disableDragging полностью отключает перетаскивание.

cancel?: string;

Свойство cancel отключает и указывает селектор для предотвращения инициализации перетаскивания (например, .body).

dragAxis?: 'x' | 'y' | 'both' | 'none'

Направление разрешённого движения (перетаскивания) ('x','y','both','none').

bounds?: string; | Element

Определяет границы перемещения. Принимаемые значения:

  • parent ограничивает перемещение в пределах offsetParent узла (ближайший узел с позицией relative или absolute)
  • window, body, селектор типа .fooClassName или
  • Element.

enableUserSelectHack?: boolean;

По умолчанию мы добавляем атрибуты 'user-select:none' в тело документа, чтобы предотвратить некрасивый выбор текста во время перетаскивания. Если это вызывает проблемы для вашего приложения, установите значение false.

scale?: number;

Указывает масштаб холста, который вы изменяете размер и перетаскиваете этот элемент. Это позволяет, например, получить правильные дельты изменения размера и перетаскивания, когда вы увеличиваете или уменьшаете масштаб с помощью преобразования или матрицы в родительском элементе этого элемента. Если опущено, установите 1.

Callback

onResizeStart?: RndResizeStartCallback;

Тип RndResizeStartCallback ниже.

export type RndResizeStartCallback = (
  e: SyntheticMouseEvent<HTMLDivElement> | SyntheticTouchEvent<HTMLDivElement>,
  dir: ResizeDirection,
  refToElement: React.ElementRef<'div'>,
) => void;

Вызывается при начале изменения размера изменяемого компонента.

onResize?: RndResizeCallback;

RndResizeCallback тип ниже.

export type RndResizeCallback = (
  e: MouseEvent | TouchEvent,
  dir: ResizeDirection,
  refToElement: React.ElementRef<'div'>,
  delta: ResizableDelta,
  position: Position,
) => void;

Вызывается, когда изменяемый компонент изменяет размер.

onResizeStop?: RndResizeCallback;

RndResizeCallback тип ниже.

export type RndResizeCallback = (
  e: MouseEvent | TouchEvent,
  dir: ResizeDirection,
  refToElement: React.ElementRef<'div'>,
  delta: ResizableDelta,
  position: Position,
) => void;

Вызывается, когда изменение размера изменяемого компонента останавливается.

onDragStart: DraggableEventHandler;

Обработчик, вызываемый при перетаскивании.

type DraggableData = {
  node: HTMLElement,
  x: number,
  y: number,
  deltaX: number, deltaY: number,
  lastX: number, lastY: number
};

type DraggableEventHandler = (
  e: SyntheticMouseEvent | SyntheticTouchEvent, data: DraggableData,
) => void | false;

onDrag: DraggableEventHandler;

onDrag вызывается со следующими параметрами:

type DraggableData = {
  node: HTMLElement,
  x: number,
  y: number,
  deltaX: number, deltaY: number,
  lastX: number, lastY: number
};

type DraggableEventHandler = (
  e: SyntheticMouseEvent | SyntheticTouchEvent, data: DraggableData,
) => void | false;

onDragStop: DraggableEventHandler;

onDragStop вызывается при остановке перетаскивания.

type DraggableData = {
  node: HTMLElement,
  x: number,
  y: number,
  deltaX: number, deltaY: number,
  lastX: number, lastY: number
};

type DraggableEventHandler = (
  e: SyntheticMouseEvent | SyntheticTouchEvent, data: DraggableData,
) => void | false;

Instance API

updateSize(size: { width: string | number, height: string | number })

Обновить размер компонента. Например, можно установить 300, '300px', 50%. Данный фрагмент написан на языке JavaScript.

this.rnd.updateSize({ width: 200, height: 300 });
}

render() {
  return (
    <Rnd ref={c => { this.rnd = c; }} ...rest >
      example
    </Rnd>
  );
}
...

UpdatePosition({ x: number, y: number }): void

Обновление позиции компонента. Свойства grid и bounds игнорируются при вызове этого метода.

  • Например:
class YourComponent extends Component {

  ...

  update() {
    this.rnd.updatePosition({ x: 200, y: 300 });
  }

  render() {
    return (
      <Rnd ref={c => { this.rnd = c; }} ...rest >
        example
      </Rnd>
    );
  }

  ...
}

allowAnyClick?: boolean

Если установлено значение true, позволит перетаскивать при кликах не левой кнопкой мыши.

Тест

npm t

Вклад

Если у вас есть запрос на функцию, пожалуйста, добавьте его как проблему или сделайте запрос на вытягивание.

Если вы обнаружили ошибку, пожалуйста, воспроизведите её в CodeSandbox, чтобы помочь нам легко изолировать её.

Журнал изменений

v10.4.11

— Обновление re-resizable до версии 6.9.17. — Исправления #942, определение обратных ссылок inline для работы с последними версиями Next.js / React.

v10.4.10

— Обновление re-resizable до версии 6.9.14.

v10.4.7

— Исправлена ошибка, maxHeight не работает с % #914.

v10.4.6

— Обновление re-resizable до версии 6.9.11. — Обновление react-draggable до версии 4.4.6. — Исправлена ошибка, неправильное положение в onDrag #910.

v10.4.1

— Поддержка элемента для границ.

v10.3.7

— Обновление re-resizable до версии 6.9.6. — Добавление peer deps.

v10.3.6

— Обновление re-resizable до версии 6.9.2. — Обновление react-draggable до v4.4.4.

v10.3.5

— Обновление re-resizable до версии 6.9.1.

v10.3.4

— Исправлен контроль границ с заблокированным соотношением сторон (полностью исправляет #209).

v10.3.1, v10.3.2

— Исправлена ошибка, проблема верхнего и левого изменения размера, вызванная «позицией» #792.

v10.3.0

— Исправлена ошибка положения обратного вызова при указании dragAxis.

v10.2.5

— Исправлена проблема с мерцанием при включении dragAxis и изменении размера компонента #780.

v10.2.3

— Исправлена ошибка: если установить minWidth или minHeight с помощью px, изменение размера не работает. #739

v10.2.0

— Обновление react-draggable до версии v4.4.3. — Добавлены реквизиты allowAnyClick. — Добавлены реквизиты nodeRef.

v10.1.10

— Понижение версии react-draggable до версии v4.2.0 #690.

v10.1.9

— Обновление react-draggable до версии v4.3.1.

v10.1.8

— Обновление re-resizable до версии v6.3.2.

v10.1.7

— Незначительное исправление ошибки с переадресацией отмены указания события onDrag. (#667)

v10.1.6

— Исправление #641 без возникновения других проблем с типизацией.

v10.1.5

— Исправлена ошибка, react-draggable не связывается с rollup #641.

v10.1.4

— Исправлена ошибка, поле перемещается при изменении размера #622.

v10.1.3

— Исправлена ошибка, позиция неверна при onResize #618.

v10.1.2

— Обновление re-resizable до версии 6.1.1. — Обновление react-draggable до версии 4.1.0.

v10.1.1

— Обновление re-resizable до версии 6.1.0.

v10.1.0

— Реализовать resizeHandleComponent #591. — Обновить зависимость react-draggable до версии v4.

И так далее. onMouseDown={...} />

  • [BREAKING] fix: [#335] add . to dragHandleClassName automatically, please pass string (i.e handle).
  • [BREAKING] fix: remove extendsProps. Please add extends props directly. i.e) <Rnd data-foo="42" />.
  • [BREAKING] fix: remove z props. Please add zIndex via style props. i.e) <Rnd style={{ zIndex: 9 }} />.

v8.0.0-beta.2

  • fix: Upgrade re-resizable to fix percentage size and bare behavior.

v8.0.0-beta.1

  • fix: Fixed a bug, controlled position does not work correctly.
  • feat: Use typescript instead of flowype.

v8.0.0-beta.0

  • fix: Remove dummy <div />, isMounted state and setParentPosition().

v7.4.3

  • fix: Add props,children to dummy <div> to render children in first.

v7.4.2 (unpublished)

fix: isMounted and (!this.state.isMounted) return <div /> line #356

v7.4.1

  • fix: Fixed Array.from error in IE11

v7.4.0

  • fix: add enableUserSelectHack?: boolean;.

v7.3.1

  • chore(deps): upgrade deps
  • chore(deps): upgrade lint and remove unused state
  • chore(deps): install prettier

v7.3.0

  • chore(deps): upgrade re-resizable

v7.2.0

  • Support for cancel feature of react-draggable #206

v7.1.5

  • Fixed a issue #199 Add enableUserSelectHack props to react-draggable

v7.1.4

  • Fixed a issue #188 maxWidth and maxHeight props don't respect after resize

v7.1.3

  • Fixed a bug, extendProps is not passed correctly.
  • Fixed a bug, bounds is not work correctly. (#162)

v7.1.1 / v7.1.2

  • Add internal props.

v7.1.0

  • Add size.
  • Add position.

v7.0.0

  • Add default instead of x, y, width, height.
  • Add resizeHandleWrapperClass and resizeHandleWrapperStyle.

v6.0.1

  • Remove unnecessary types.

v6.0.0

  • Use rollup.
  • Support % min/max size.
  • Change props, remove default and add x, y, width, height.
  • Rename dragHandlersXXXX and resizeHandlersXXXX props to dragHandleXXXX and resizeHandleXXXX.

v5.1.3

  • Fix cursor style, set normal to cursor style when dragHandlerClassName is not empty.

v5.1.2

  • Add position relative when component will update.

v5.1.1

  • Add top: 0, left: 0.
  • Add position relative when parent position equals static.

v5.1.0

  • Update dependencies(react-draggable v3, flow-bin v0.53, and other...)

v5.0.9

  • Fix bug new z props is not applied to state.

v5.0.8

  • Add extendsProps. #129

v5.0.7

  • Add disableDragging props.

v5.0.6

  • Fix flow error.

v5.0.5

  • Add index.js.flow

v5.0.4

  • Fix Issue #117.

v5.0.3

  • Fix updateZIndex.
  • Fix updateSize.
  • Fix left and top bounds.

v5.0.2

  • Fix argument events #100

v5.0.1

  • Fix example
  • Update README

v5.0.0

  • Fix resize bounds.
  • Modify API.
  • Use original react-draggable.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Изменяемый размер и перетаскиваемый компонент для React. Развернуть Свернуть
MIT
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/mirrors-react-rnd.git
git@api.gitlife.ru:oschina-mirror/mirrors-react-rnd.git
oschina-mirror
mirrors-react-rnd
mirrors-react-rnd
master