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;