index.js 1.2 KB
Newer Older
FE committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
import React, { Component } from 'react';
import ReactDOM from 'react-dom';
import classnames from 'classnames';
import './index.scss';

const Root = document.querySelector('body');
const events = ['touchmove', 'mousewheel'];

class Mask extends Component {

  constructor(props) {
    super(props);
    if(!this.el) {
      this.el = document.createElement('div');
    }
  }

  componentDidMount() {
    events.forEach(item => {
      this.el.addEventListener(item, this.preventEvent, {
          passive: false
      })
    })
    Root.appendChild(this.el);
  }

  componentWillUnmount() {
    Root.removeChild(this.el);
  }

  preventEvent = e => {
    e.preventDefault();
  }

  render() {
    const { visible, handleToHide, className } = this.props;
    if(visible) {
      return ReactDOM.createPortal(
        (
          <div className="mask">
            <div className={classnames("mask-content", className)}>
              {this.props.children}
            </div>
            <div className="mask-footer">
              <i className="mask-button__close" onClick={handleToHide}></i>
            </div>
          </div>
        ),
        this.el
      );
    }else {
      return null;
    }
  }
}

export default Mask;