Advertisement
Guest User

Untitled

a guest
Dec 4th, 2016
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ./widgets/ResizeblePanelWidget.js
  2. import React, {Component, PropTypes} from 'react';
  3. import '../helpers/number';
  4.  
  5.  
  6. export default class ResizeblePanelWidget extends Component {
  7.  
  8.   constructor(props) {
  9.     super(props);
  10.     this.handleResize = this.handleResize.bind(this);
  11.     this.handleResizeStart = this.handleResizeStart.bind(this);
  12.     this.handleResizeEnd = this.handleResizeEnd.bind(this);
  13.     this.type = 'horizontal';
  14.     this.resizeRange = [20, 60];
  15.     this.state = {
  16.       size: 20
  17.     }
  18.   }
  19.  
  20.   handleResize(event) {
  21.     event.preventDefault();
  22.  
  23.     if (this.props.type === 'horizontal') {
  24.       this.setState({size: (100 * event.clientX / document.body.clientWidth).between(this.resizeRange)});
  25.     } else if (this.props.type === 'vertical') {
  26.       this.setState({size: (100 * event.clientY / document.body.clientHeight).between(this.resizeRange)});
  27.     }
  28.   }
  29.  
  30.   handleResizeStart(event) {
  31.     if (event.button === 0) {
  32.       event.preventDefault();
  33.  
  34.       document.addEventListener('mousemove', this.handleResize);
  35.       document.addEventListener('mouseup', this.handleResizeEnd);
  36.  
  37.       console.log('addEventListener handleResize onMouseMove');
  38.     }
  39.   }
  40.  
  41.   handleResizeEnd(event) {
  42.     if (event.button === 0) {
  43.       event.preventDefault();
  44.  
  45.       document.removeEventListener('mousemove', this.handleResize);
  46.       document.removeEventListener('mouseup', this.handleResizeEnd);
  47.  
  48.       console.log('removeEventListener handleResize onMouseMove');
  49.     }
  50.   }
  51.  
  52.   render() {
  53.     let delimiterPos;
  54.     let sizeFirst;
  55.     let sizeSecond;
  56.  
  57.     if (this.props.type === 'horizontal') {
  58.       delimiterPos = {left: this.state.size + '%'};
  59.       sizeFirst = {width: this.state.size + '%'};
  60.       sizeSecond = {width: (100 - this.state.size) + '%'};
  61.     } else if (this.props.type === 'vertical') {
  62.       delimiterPos = {top: this.state.size + '%'};
  63.       sizeFirst = {height: this.state.size + '%'};
  64.       sizeSecond = {height: (100 - this.state.size) + '%'};
  65.     }
  66.  
  67.     return (
  68.       <div className={"resizeble-panel " + this.props.type}>
  69.         <div style={sizeFirst}>{this.props.firstPanel}</div>
  70.         <div style={sizeSecond}>{this.props.secondPanel}</div>
  71.         <div onMouseDown={this.handleResizeStart} style={delimiterPos}></div>
  72.       </div>
  73.     );
  74.   }
  75. }
  76.  
  77.  
  78. // ./components/Main.js
  79. import React, {Component, PropTypes} from 'react';
  80. import ResizeblePanel from '../widgets/ResizeblePanelWidget';
  81. import '../helpers/number';
  82.  
  83.  
  84. export default class Main extends Component {
  85.  
  86.   render() {
  87.     return (
  88.       <ResizeblePanel type="horizontal"
  89.                       firstPanel={<b>123</b>}
  90.                       secondPanel={<ResizeblePanel type="vertical"
  91.                                                    firstPanel={<b>321.123</b>}
  92.                                                    secondPanel={<b>321.321</b>}
  93.                       />}
  94.       />
  95.     );
  96.   }
  97. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement