ndla-ui
Version:
UI component library for NDLA.
64 lines (55 loc) • 1.47 kB
JSX
/**
* Copyright (c) 2016-present, NDLA.
*
* This source code is licensed under the GPLv3 license found in the
* LICENSE file in the root directory of this source tree.
*
*/
import React, { Component } from 'react';
import PropTypes from 'prop-types';
import throttle from 'lodash/throttle';
import Fade from './Fade';
export default class DisplayOnPageYOffset extends Component {
constructor(props) {
super(props);
this.state = {
show: props.yOffsetMin === 0,
};
this.handleScroll = throttle(this.handleScroll.bind(this), 50);
}
componentDidMount() {
if (window) {
window.addEventListener('scroll', this.handleScroll);
this.handleScroll();
}
}
componentWillUnmount() {
if (window) {
window.removeEventListener('scroll', this.handleScroll);
}
}
handleScroll() {
if (
window.pageYOffset >= this.props.yOffsetMin &&
(this.props.yOffsetMax === null ||
window.pageYOffset <= this.props.yOffsetMax)
) {
if (!this.state.show) {
this.setState({ show: true });
}
} else if (this.state.show) {
this.setState({ show: false });
}
}
render() {
return <Fade in={this.state.show}>{this.props.children}</Fade>;
}
}
DisplayOnPageYOffset.propTypes = {
children: PropTypes.node.isRequired,
yOffsetMin: PropTypes.number.isRequired,
yOffsetMax: PropTypes.number,
};
DisplayOnPageYOffset.defaultProps = {
yOffsetMax: null,
};