A thin react component wrapper bundled with scroll-into-view-if-needed
react-scroll-into-view-if-needed
A thin react component wrapper bundled with the fantastic scroll-into-view-if-needed ponyfill.
Install
yarn add react-scroll-into-view-if-needed
or
npm install react-scroll-into-view-if-needed --save
Usage
import ScrollIntoViewIfNeeded from 'react-scroll-into-view-if-needed';
const MyComponent = () => (
<div style={{ paddingTop: 2000 }}>
<ScrollIntoViewIfNeeded>
<div>Hello</div>
</ScrollIntoViewIfNeeded>
</div>
);
Props
Each prop is described in detail below, but for a quicker reference - check out the propTypes object in src.
options
Type:
object
Default:{ behavior: 'smooth', scrollMode: 'if-needed' }
Full list of options are described here
<ScrollIntoViewIfNeeded options={{
scrollMode: 'always',
}}>
<div>Hello</div>
</ScrollIntoViewIfNeeded>
active
Type:
boolean
Default:true
The active
prop allows controll of when to scroll to the component. By default, it will attempt to scroll as soon as it is mounted, but you can set this prop to manually control when to trigger the scroll behavior from the parent component.
class Example extends React.PureComponent {
constructor(props) {
super(props);
this.state = { active: false };
}
handleScrollToggle = () => this.setState({ active: !this.state.active });
render() {
const { active } = this.state;
return (
<div>
<button onClick={this.handleScrollToggle}>Scroll</button>
<div style={{ paddingTop: 2000 }}>
<ScrollIntoViewIfNeeded active={active}>
<div>Hello</div>
</ScrollIntoViewIfNeeded>
</div>
</div>
);
}
}
elementType
Type:
string
Default:'div'
Set the wrapper component type. For example, this could also be 'footer'
, 'button'
, etc... See the React createElement api.
<ScrollIntoViewIfNeeded elementType="span">
<div>Hello</div>
</ScrollIntoViewIfNeeded>
className, id, etc
You can also pass normal element attributes like className
to the component.
<ScrollIntoViewIfNeeded elementType="span" className={styles.something}>
<div>Hello</div>
</ScrollIntoViewIfNeeded>