π Check if your react component are visible on the screen without pain and with performance in mind π!
View the demo.
$ npm install --save react-on-screen
$ yarn add react-on-screen
A UMD build is also available :
<script src="https://github.com/fkhadra/react-on-screen/raw/master/dist/ReactOnScreen.min.js"></script>
import React from 'react';
import TrackVisibility from 'react-on-screen';
const ComponentToTrack = ({ isVisible }) => {
const style = {
background: isVisible ? 'red' : 'blue'
};
return <div style={style}>Hello</div>;
}
const YourApp = () => {
return (
{/* Some Stuff */}
<TrackVisibility>
<ComponentToTrack />
</TrackVisibility>
{/* Some Stuff */}
);
}
You can use a render props is you want to !
const YourApp = () => {
return (
<TrackVisibility>
{({ isVisible }) => isVisible && <ComponentToTrack />}
</TrackVisibility>
);
}
For many cases you may want to track the visibility only once. This can be done simply as follow :
const YourApp = () => {
return (
<TrackVisibility once>
<ComponentToTrack />
</TrackVisibility>
);
}
Using offset
props can be usefull if you want to lazy load an image for instance.
const YourApp = () => {
return (
<TrackVisibility offset={1000}>
{({ isVisible }) => isVisible ? <ComponentToTrack /> : <Loading />}
</TrackVisibility>
);
}
You may want to consider that a component is visible as soon as a part of the component is visible on screen. You can use the partialVisibility
props for that.
const YourApp = () => {
return (
<TrackVisibility partialVisibility>
{({ isVisible }) => <ComponentToTrack />}
</TrackVisibility>
);
}
const YourApp = () => {
return (
<TrackVisibility partialVisibility tag="h1">
{({ isVisible }) => <ComponentToTrack />}
</TrackVisibility>
);
}
props | type | default | description |
---|---|---|---|
once | bool | false | If set to true track the visibility only once and remove the event listeners |
throttleInterval | int | 150 | Tweak the event listeners. See David Corbacho's article |
children | React Components | - | Can be one or many react components |
style | object | - | Style attributes |
className | string | - | Css classes |
offset | number | 0 | Allows you to specify how far left or above of the viewport you want to set isVisible to true |
partialVisibility | bool | false | Set isVisible to true on element as soon as any part is in the viewport |
tag | string | div | Allows specifying html tag of your choice |
Any contributions is welcome !
$ yarn start
$ yarn lint
$ yarn test
$ yarn build // will lint and run test before
Licensed under MIT