React 컴포넌트/Div를 드래그 가능하게 만들기
-
onMouse
를 사용하여 React 구성 요소/Div를 드래그 가능하게 만들기 - React-Draggable 종속성을 사용하여 React 구성 요소/Div를 드래그 가능하게 만들기
- 아름다운 DnD로 React Component/Div를 드래그 가능하게 만들기
- 결론
이제 웹사이트 빌더가 되거나 취미로 웹사이트 제작을 선택하는 것이 재미있습니다. 마치 직소 퍼즐처럼 마우스를 사용하여 콘텐츠를 선택하고 정렬하는 것만으로 웹사이트를 구축할 수 있습니다.
사용자가 항목을 쉽게 끌어다 놓을 수 있는 콘텐츠나 앱을 만들면 앱 초보자도 쉽게 사용할 수 있어 시장에서 앱의 폭넓은 수용으로 이어질 수 있습니다.
React에서 앱이나 게임을 빌드할 때 콘텐츠를 끌어다 놓는 기능을 사용하면 이러한 작업, 심지어 더 복잡한 작업을 쉽고 빠르게 완료할 수 있습니다.
구성 요소를 드래그 가능하게 만드는 방법을 배우는 데 도움이 되는 예제를 살펴보겠습니다.
onMouse
를 사용하여 React 구성 요소/Div를 드래그 가능하게 만들기
React draggable 기능은 수많은 이벤트 리스너를 활용하지만 이 예제에서는 onMouseDown
, onMouseMove
및 onMouseUp
의 세 가지를 활용합니다.
우리는 새로운 React 프로젝트를 만드는 것으로 시작합니다. VS Code에서 터미널을 열고 npx create-react-app dragon
을 입력합니다.
그런 다음 dragon
폴더로 이동하여 두 개의 폴더를 만듭니다. 첫 번째 폴더의 이름은 Main
이고 그 안에 MainApp.js
및 MainApp.css
파일이 생성됩니다.
이 파일에는 홈페이지용 코드가 포함됩니다.
두 번째 폴더의 이름은 Components
이고 그 안에 Dialog.js
와 Dialog.css
라는 두 개의 파일이 있습니다. 이것은 브라우저 화면에서 드래그하려는 구성 요소입니다.
MainApp.js
내부에 다음 코드를 입력합니다.
코드 조각(MainApp.js
):
import React, { Component } from 'react';
import './MainApp.css';
import Dialog from '../Components/Dialog';
export default class MainApp extends Component {
constructor(props) {
super(props);
this.state = {
showDialog: false
}
}
_showDialog() {
this.setState({showDialog: !this.state.showDialog});
}
render() {
return (
<div className='MainApp'>
<div className='Title'>Example Dialog Popper</div>
<div className='button' onClick={this._showDialog.bind(this)}> Show Dialog </div>
<Dialog onClose={this._showDialog.bind(this)} show={this.state.showDialog}/>
</div>
);
}
}
이 페이지에서 Show Dialog
버튼을 클릭하면 onClick
이벤트 리스너가 활성화되고 드래그하려는 구성 요소가 팝업됩니다.
MainApp.css
에는 페이지를 아름답게 하는 스타일이 포함되어 있습니다.
코드 조각(MainApp.css
):
.Title {
font-weight: bold;
font-size: 16px;
padding-top: 30px;
}
.button {
font-size: 12px;
width: 100px;
color: black;
border: 2px solid black;
border-radius: 30px;
padding: 10px;
margin: 10px;
margin-left: 650px;
}
.MainApp {
background-color: lightsalmon;
height: 1000px;
}
드래그 가능한 구성 요소를 만드는 이 예제의 가장 좋은 부분으로 이동합니다. Dialog.js
로 이동하여 몇 가지 코딩을 수행합니다.
코드 조각(Dialog.js
):
import React, { Component } from 'react';
import './Dialog.css';
export default class Dialog extends Component {
constructor(props) {
super(props);
this.state = {
diffX: 0,
diffY: 0,
dragging: false,
styles: {}
}
this._dragStart = this._dragStart.bind(this);
this._dragging = this._dragging.bind(this);
this._dragEnd = this._dragEnd.bind(this);
}
_dragStart(e) {
this.setState({
diffX: e.screenX - e.currentTarget.getBoundingClientRect().left,
diffY: e.screenY - e.currentTarget.getBoundingClientRect().top,
dragging: true
});
}
_dragging(e) {
if(this.state.dragging) {
var left = e.screenX - this.state.diffX;
var top = e.screenY - this.state.diffY;
this.setState({
styles: {
left: left,
top: top
}
});
}
}
_dragEnd() {
this.setState({
dragging: false
});
}
render() {
var classes = this.props.show ? 'Dialog' : 'Dialog hidden';
return (
<div className={classes} style={this.state.styles} onMouseDown={this._dragStart} onMouseMove={this._dragging} onMouseUp={this._dragEnd}>
<div className='DialogTitle'>My Dialog</div>
<div className='Contents'>
Contents of the Dialog:
- one
- two
- three
</div>
<div className='closeButton' onClick={this.props.onClose}>
Close
</div>
</div>
);
}
}
모든 상황에서 구성 요소가 되기를 원하는 상태를 정의합니다. 기본 상태에서 구성 요소는 아무데도 움직이지 않으며 드래그를 false
로 설정합니다.
그런 다음 구성 요소가 있을 세 가지 상태, 즉 dragStart
, drag
및 dragEnd
를 바인딩하고 각각에 맞는 onMouse
이벤트 리스너에 할당합니다. onMouseDown
은 구성 요소에 마우스를 놓으면 활성화되고 _dragStart
에 할당된 기능이 작동합니다.
onMouseMove
는 구성 요소가 드래그되고 있음을 나타내며 _draging
에 할당된 기능을 활성화합니다.
마지막으로 onMouseUp
은 마우스가 구성 요소에 더 이상 배치되지 않았음을 나타냅니다. 이것은 _dragEnd
에 연결된 기능을 활성화합니다.
Dialog.css
는 드래그 가능한 구성 요소의 스타일을 지정하는 코드가 수행되는 곳입니다.
코드 조각(Dialog.css
):
.Dialog {
width: 400px;
height: 400px;
background-color: lightblue;
border-radius: 10px;
border: 3px solid grey;
position: absolute;
cursor: move;
top: 150px;
left: 520px;
}
.hidden {
display: none;
}
.DialogTitle {
font-weight: bold;
padding-top: 10px;
padding-bottom: 10px;
border-bottom: 3px solid grey;
}
.Contents {
padding-top: 50px;
padding-bottom: 200px;
}
.closeButton {
font-size: 12px;
width: 100px;
color: black;
border: 2px solid black;
border-radius: 25px;
padding: 10px;
margin: 10px;
margin-left: 140px;
cursor: pointer;
}
그런 다음 MainApp
을 다음과 같이 App.js
로 가져옵니다.
코드 조각(App.js
):
import React from 'react';
import './App.css';
import MainApp from './Main/MainApp.js';
function App() {
return (
<div className="App">
<MainApp />
</div>
);
}
export default App;
출력:
React-Draggable 종속성을 사용하여 React 구성 요소/Div를 드래그 가능하게 만들기
반응의 종속성을 활용하여 구성 요소를 드래그 가능하게 만들 수도 있습니다. npx create-react-app dragtwo
로 새 프로젝트를 만든 후.
종속성을 설치하기 위해 dragtwo
폴더로 이동합니다. 터미널에서 npm install react-draggable
을 입력합니다.
그런 다음 App.js
로 이동하여 약간의 코딩을 수행합니다.
코드 조각(App.js
):
import logo from './logo.svg';
import './App.css';
import Draggable from "react-draggable";
function App() {
return (
<Draggable>
<img
src="https://images.pexels.com/photos/20787/pexels-photo.jpg?auto=compress&cs=tinysrgb&h=350"
alt="new"
/>
</Draggable>
);
}
export default App;
출력:
먼저 react-draggable
에서 Draggable
을 가져옵니다. 그런 다음 드래그할 수 있는 구성 요소를 만듭니다.
그런 다음 이 구성 요소를 <Draggable></Draggable>
태그 안에 래핑합니다.
아름다운 DnD로 React Component/Div를 드래그 가능하게 만들기
React의 Beautiful DnD 종속성은 구성 요소를 드래그 가능하게 만드는 데 사용할 수 있는 또 다른 간단하고 사용하기 쉬운 라이브러리입니다.
부팅하려면 먼저 반응 구성 요소를 만든 다음 install react-beautiful-dnd --save
를 사용하여 종속성을 설치하기 위해 프로젝트 폴더로 이동합니다.
다음으로 App.js
파일을 열고 다음 코드를 입력합니다.
코드 조각(App.js
):
import React, { useState } from 'react';
import { DragDropContext, Droppable, Draggable } from 'react-beautiful-dnd';
import './App.css';
const finalSpaceCharacters = [
{
id: 'james',
name: 'James',
},
{
id: 'john',
name: 'John',
},
{
id: 'israel',
name: 'Israel',
},
{
id: 'joker',
name: 'Joker',
},
{
id: 'quinn',
name: 'Quinn',
}
]
function App() {
const [characters, updateCharacters] = useState(finalSpaceCharacters);
function handleOnDragEnd(result) {
if (!result.destination) return;
const items = Array.from(characters);
const [reorderedItem] = items.splice(result.source.index, 1);
items.splice(result.destination.index, 0, reorderedItem);
updateCharacters(items);
}
return (
<div className="App">
<header className="App-header">
<h1>Final Space Characters</h1>
<DragDropContext onDragEnd={handleOnDragEnd}>
<Droppable droppableId="characters">
{(provided) => (
<ul className="characters" {...provided.droppableProps} ref={provided.innerRef}>
{characters.map(({ id, name }, index) => {
return (
<Draggable key={id} draggableId={id} index={index}>
{(provided) => (
<li ref={provided.innerRef} {...provided.draggableProps} {...provided.dragHandleProps}>
<p>
{name}
</p>
</li>
)}
</Draggable>
);
})}
{provided.placeholder}
</ul>
)}
</Droppable>
</DragDropContext>
</header>
</div>
);
}
export default App;
출력:
부팅하려면 먼저 끌어서 재정렬해야 하는 이름 배열을 만듭니다. 그런 다음 splice 방법을 사용하여 항목을 해당 위치에서 제거하면 자동으로 다음 항목으로 대체됩니다.
다음으로, 항목의 끌어서 놓기를 처리하는 함수를 만듭니다. 구성 요소를 끌기 위한 함수를 만든 후 <Draggable></Draggable>
태그 안에 이러한 모든 함수를 래핑합니다.
항목을 놓기 위한 함수를 만들고 <Droppable></Droppable>
내부의 draggable
태그에 있는 함수를 포함하여 래핑한 다음 <DragDropContext></DragDropContext> 안에 이 모든 것을 래핑합니다.
태그.
결론
React의 유연성은 거의 모든 프로젝트를 가능하고 간단하게 만들 수 있습니다. React 드래그 기능은 사용자를 위한 게임 및 사용하기 쉬운 앱을 만드는 데 유용합니다.
Fisayo is a tech expert and enthusiast who loves to solve problems, seek new challenges and aim to spread the knowledge of what she has learned across the globe.
LinkedIn