Используйте React state
и создайте кнопку-переключатель, чтобы разрешить / запретить перетаскивание (в то же время это оказывает обратный эффект для входных данных).
Чтобы ограничить область перетаскивания, вы можете указать ее следующим образом:
bounds={{left: number, top: number, right: number, bottom: number}}
или использовать:
bounds="parent"
для ограничения движения в пределах offsetParent узла (в приведенном ниже примере это height
и width
из <div className="container">
).
Более подробную информацию можно найти здесь .
Рабочий пример: https://codesandbox.io/s/k5n52xq70r (ограничения height
и width
, указанные в styles.css
таблица стилей)
компоненты / App.js
import React, { Component } from "react";
import Draggable from "react-draggable";
export default class App extends Component {
state = { disabled: false };
toggleDraggable = () => this.setState(prevState => ({ disabled: !this.state.disabled }));
render = () => {
const { disabled } = this.state;
return (
<div className="container">
<Draggable disabled={disabled} bounds="parent">
<div style={{ width: 200 }} className={!disabled ? "draggable" : null}>
<h4 style={{ height: 20 }}>{!disabled && "Drag Me"}</h4>
<textarea disabled={!disabled} className="uk-textarea"/>
<input disabled={!disabled} className="uk-input" />
<input className="uk-checkbox" type="checkbox" disabled={!disabled}/>
<br />
<button className="uk-button uk-button-primary" onClick={this.toggleDraggable}>
{disabled ? "Enable" : "Disable"} Drag
</button>
</div>
</Draggable>
</div>
);
};
}
styles.css
.container {
height: calc(100vh - 50px);
width: calc(100vh - 100px);
padding: 20px;
}
.draggable {
cursor: -webkit-grab;
cursor: grab;
}
.uk-input,
.uk-textarea,
.uk-checkbox {
margin-bottom: 10px;
}