요즘 한창 뜨고 있다는 React.js 로 구현된 드래그 & 드랍 예제입니다.
아래는 React.js 구현 소스입니다.
var placeholder = document.createElement("li");
placeholder.className = "placeholder";
class List extends React.Component {
constructor(props) {
super(props);
this.state = {...props};
}
dragStart(e) {
this.dragged = e.currentTarget;
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('text/html', this.dragged);
}
dragEnd(e) {
this.dragged.style.display = 'block';
this.dragged.parentNode.removeChild(placeholder);
// update state
var data = this.state.colors;
var from = Number(this.dragged.dataset.id);
var to = Number(this.over.dataset.id);
if(from < to) to--;
data.splice(to, 0, data.splice(from, 1)[0]);
this.setState({colors: data});
}
dragOver(e) {
e.preventDefault();
this.dragged.style.display = "none";
if(e.target.className === 'placeholder') return;
this.over = e.target;
e.target.parentNode.insertBefore(placeholder, e.target);
}
render() {
var listItems = this.state.colors.map((item, i) => {
return (
<li
data-id={i}
key={i}
draggable='true'
onDragEnd={this.dragEnd.bind(this)}
onDragStart={this.dragStart.bind(this)}>{item}</li>
)
});
return (
<ul onDragOver={this.dragOver.bind(this)}>
{listItems}
</ul>
)
}
}
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
colors: ['Red', 'Green', 'Blue', 'Yellow', 'Black', 'White', 'Orange']
}
}
render() {
return (
<div>
<List colors={this.state.colors} />
</div>
)
}
}
ReactDOM.render(
<App />,
document.getElementById('app')
);
클래스며 생성자며 오버라이딩하는 모습까지.. 볼수록 더 파고 싶어지는군요!
조만간 react 제대로 공부해봐야겠습니다.
근데 이거.... IE 11 에서도 작동을 안하네요...ㄷㄷ.. 크롬 등에서 확인해보세요~
React.js 관련 글 보기
간단한 사용 예제 및 Demo
'Dev. 웹 > Front-end 웹개발을 위한 codepen' 카테고리의 다른 글
[2016.1.19] flexbox 속성 사용 예제 - direction, align, wrap, justify, grow, shrink, order (0) | 2016.01.19 |
---|---|
[2016.1.14] css3 transform preserve-3d 속성을 이용한 3d 아이폰 디자인 예제 (2) | 2016.01.14 |
[2016.1.4] Typed.js jquery plugin을 활용한 personal website (0) | 2016.01.04 |
[2015.12.30] notification with count - 숫자가 표시되는 알림 아이콘 (0) | 2015.12.30 |
[2015.12.29] javascript pairs games - 짝맞추기 게임 (0) | 2015.12.29 |