React Base Fiddle (JSX)
Starting point for creating JSFiddles with React. This uses React with Addons.
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.24/browser.js"></script>
<script src="https://npmcdn.com/react@latest/dist/react-with-addons.js"></script>
<script src="https://npmcdn.com/react-dom@latest/dist/react-dom.js"></script>
<script src="https://facebook.github.io/react/js/jsfiddle-integration-babel.js"></script>
<div id="container">
<!-- This element's contents will be replaced with your component. -->
</div>
JavaScript 1.7
const Draggable = React.createClass({
getInitialState() {
return {
relX: 0,
relY: 0
};
},
onMouseDown(e) {
if (e.button !== 0) return;
const ref = ReactDOM.findDOMNode(this.refs.handle);
const body = document.body;
const box = ref.getBoundingClientRect();
this.setState({
relX: e.pageX - (box.left + body.scrollLeft - body.clientLeft),
relY: e.pageY - (box.top + body.scrollTop - body.clientTop)
});
document.addEventListener('mousemove', this.onMouseMove);
document.addEventListener('mouseup', this.onMouseUp);
e.preventDefault();
},
onMouseUp(e) {
document.removeEventListener('mousemove', this.onMouseMove);
document.removeEventListener('mouseup', this.onMouseUp);
e.preventDefault();
},
onMouseMove(e) {
this.props.onMove({
x: e.pageX - this.state.relX,
y: e.pageY - this.state.relY
});
e.preventDefault();
},
render() {
return <div
onMouseDown={this.onMouseDown}
style={{
position: 'absolute',
left: this.props.x,
top: this.props.y
}}
ref="handle"
>{this.props.children}</div>;
}
})
const Test = React.createClass({
getInitialState() {
return {x: 100, y: 200};
},
render() {
const {x, y} = this.state;
return <Draggable x={x} y={y} onMove={this.move}>
Drag me
</Draggable>;
},
move(e) {
this.setState(e);
}
});
ReactDOM.render(<Test />, document.getElementById('container'));