UNPKG

@ysmood/material-ui

Version:

Material Design UI components built with React

102 lines (82 loc) 2.44 kB
var React = require('react'); var StylePropable = require('./mixins/style-propable'); var Transitions = require('./styles/transitions'); var Colors = require('./styles/colors'); var Overlay = React.createClass({ mixins: [StylePropable], propTypes: { show: React.PropTypes.bool, autoLockScrolling: React.PropTypes.bool, transitionEnabled: React.PropTypes.bool }, getDefaultProps: function() { return { autoLockScrolling: true, transitionEnabled: true }; }, componentDidUpdate: function() { if (this.props.autoLockScrolling) (this.props.show) ? this._preventScrolling() : this._allowScrolling(); }, setOpacity(opacity) { var overlay = React.findDOMNode(this); overlay.style.opacity = opacity; }, getStyles: function() { var styles = { root: { position: 'fixed', height: '100%', width: '100%', zIndex: 9, top: 0, left: '-100%', opacity: 0, backgroundColor: Colors.lightBlack, WebkitTapHighlightColor: 'rgba(0, 0, 0, 0)', // Two ways to promote overlay to its own render layer willChange: 'opacity', transform: 'translateZ(0)', transition: this.props.transitionEnabled && Transitions.easeOut('0ms', 'left', '400ms') + ',' + Transitions.easeOut('400ms', 'opacity') }, rootWhenShown: { left: '0', opacity: 1, transition: this.props.transitionEnabled && Transitions.easeOut('0ms', 'left') + ',' + Transitions.easeOut('400ms', 'opacity') } }; return styles; }, render: function() { var { show, style, ...other } = this.props; var styles = this.mergeAndPrefix(this.getStyles().root, this.props.style, this.props.show && this.getStyles().rootWhenShown) return ( <div {...other} style={styles} /> ); }, preventScrolling: function() { if (!this.props.autoLockScrolling) this._preventScrolling(); }, allowScrolling: function() { if (!this.props.autoLockScrolling) this._allowScrolling(); }, _preventScrolling: function() { var body = document.getElementsByTagName('body')[0]; body.style.overflow = 'hidden'; }, _allowScrolling: function() { var body = document.getElementsByTagName('body')[0]; body.style.overflow = ''; } }); module.exports = Overlay;