5.1.1 • Published 5 years ago

react-visibility-sensor v5.1.1

Weekly downloads
226,187
License
MIT
Repository
github
Last release
5 years ago

React Visibility Sensor

Build Status

Sensor component for React that notifies you when it goes in or out of the window viewport.

Sponsored by X-Team

Install

npm install react-visibility-sensor

Including the script directly

Useful if you want to use with bower, or in a plain old <script> tag.

In this case, make sure that React and ReactDOM are already loaded and globally accessible.

Take a look at the umd example to see this in action

Example

View an example on codesandbox

Or if you'd like to try building an example yourself locally, here's another:

View the example

To run the example locally:

  • npm run build-example
  • open example/index.html in a browser

General usage goes something like:

const VisibilitySensor = require('react-visibility-sensor');

function onChange (isVisible) {
  console.log('Element is now %s', isVisible ? 'visible' : 'hidden');
}

function MyComponent (props) {
  return (
    <VisibilitySensor onChange={onChange}>
      <div>...content goes here...</div>
    </VisibilitySensor>
  );
}

You can also pass a child function, which can be convenient if you don't need to store the visibility anywhere:

function MyComponent (props) {
  return (
    <VisibilitySensor>
      {({isVisible}) =>
        <div>I am {isVisible ? 'visible' : 'invisible'}</div>
      }
    </VisibilitySensor>
  );
}

Props

  • onChange: callback for whenever the element changes from being within the window viewport or not. Function is called with 1 argument (isVisible: boolean)
  • active: (default true) boolean flag for enabling / disabling the sensor. When active !== true the sensor will not fire the onChange callback.
  • partialVisibility: (default false) consider element visible if only part of it is visible. Also possible values are - 'top', 'right', 'bottom', 'left' - in case it's needed to detect when one of these become visible explicitly.
  • offset: (default {}) with offset you can define amount of px from one side when the visibility should already change. So in example setting offset={{top:10}} means that the visibility changes hidden when there is less than 10px to top of the viewport. Offset works along with partialVisibility
  • minTopValue: (default 0) consider element visible if only part of it is visible and a minimum amount of pixels could be set, so if at least 100px are in viewport, we mark element as visible.
  • intervalCheck: (default true) when this is true, it gives you the possibility to check if the element is in view even if it wasn't because of a user scroll
  • intervalDelay: (default 100) integer, number of milliseconds between checking the element's position in relation the the window viewport. Making this number too low will have a negative impact on performance.
  • scrollCheck: (default: false) by making this true, the scroll listener is enabled.
  • scrollDelay: (default: 250) is the debounce rate at which the check is triggered. Ex: 250ms after the user stopped scrolling.
  • scrollThrottle: (default: -1) by specifying a value > -1, you are enabling throttle instead of the delay to trigger checks on scroll event. Throttle supercedes delay.
  • resizeCheck: (default: false) by making this true, the resize listener is enabled. Resize listener only listens to the window.
  • resizeDelay: (default: 250) is the debounce rate at which the check is triggered. Ex: 250ms after the user stopped resizing.
  • resizeThrottle: (default: -1) by specifying a value > -1, you are enabling throttle instead of the delay to trigger checks on resize event. Throttle supercedes delay.
  • containment: (optional) element to use as a viewport when checking visibility. Default behaviour is to use the browser window as viewport.
  • delayedCall: (default false) if is set to true, wont execute on page load ( prevents react apps triggering elements as visible before styles are loaded )
  • children: can be a React element or a function. If you provide a function, it will be called with 1 argument {isVisible: ?boolean, visibilityRect: Object}

It's possible to use both intervalCheck and scrollCheck together. This means you can detect most visibility changes quickly with scrollCheck, and an intervalCheck with a higher intervalDelay will act as a fallback for other visibility events, such as resize of a container.

Thanks

Special thanks to contributors

License

MIT

@preply/chat@red-unica/libreria-componentes@vizzly/dashboard@balena/jellyfish-ui-components@axa-ch/pod-kmu-20@kupibilet/uidxp-common-chat-uigatsby-theme-evelangatsby-theme-sanity-evelaninfoniqa-client-core@danielballardp/infoniqa-client-corerfv-with-loadingreact-file-viewer-by-loadingreact-file-viewer-w-loadingreact-file-viewer-with-loadingyoupractice-authfm-play-when-visiblegoodyuiprebid-adpod-clientsmile-xin-amismetahkgfastamisbrawl-capped-webpage@scolab/component-exploding-dotsaux-amis-corereact-material-ui-file-manager@cloudhub-ux/core@infinitebrahmanuniverse/nolb-react-vreact-file-viewer-ata@everything-registry/sub-chunk-2623@purple-messenger/clientmintt-components-testxtras-anim-on-page-enterxenirio-react-storybookxion1-siteync-react-exposeyouramiswebserver1ws-image-managertestcenter-fileviewertopads-reactticketmelon-webtest-file-viewertwreporter-react-article-componentszzcyi-amis-uiztopia-ui@frontendadci/react-file-viewer@frontarm/demoboard-corevertical-timeline-component-for-reacttririga-carbon-addons-iot-reactvolto-slate@hehenpmtest/styled-components@healthhero/styled-components@hemantgogia09/react-file-viewer@imvision/clireact-visible-loadreact-vertical-timeline-component-fixreact18-file-viewerred-unicareakt-file-viewerrm-coreuirobopro-guishanshrewshopistry-commerce-uistarwave-react-file-viewerstorefront-ui@miata74/better-react-file-viewer@lottus-ed/components@mia-platform/api-logs@lskjs/list2@lskjs/generalxamis@gingkoo/pandora@gingkoo/pandora-1@gingkoo/pandora-ui@fi-sci/figurl-sortingview@figurl/core-components@figurl/core-views@giorgioinkode/react-file-viewer@feathery/react@gracesnoh/reflex-motion-test@marcioferlan/react-file-viewer@netology-group/media-uihematology_clientcherri-tips@metahkg/web@psionic/ui@r00dy/storefront-ui@nuzz78/react-file-viewer@pureprofile/access-dashboards-react-components@realty-mogul/rm-coreui@redcomrade/react-file-viewer@neek_hill/react-file-viewer@pranav-arya/pranav-test@ninetailed/gatsby-plugin-ninetailed@plugandwork/contracts@pareto-engineering/design-system-addon-site@pareto-engineering/design-system-addon-triage@ninetailed/client-sdk-react@ninetailed/experience-sdk-react
5.1.1

5 years ago

5.1.0

5 years ago

5.0.2-beta.160

5 years ago

5.0.2

6 years ago

5.0.1

6 years ago

5.0.0

6 years ago

4.1.3

6 years ago

4.1.2

6 years ago

4.1.1

6 years ago

4.1.0

6 years ago

4.0.0

6 years ago

3.14.0

6 years ago

3.13.1

6 years ago

3.13.0

6 years ago

3.12.0

6 years ago

3.11.1

6 years ago

3.11.0

7 years ago

3.10.1

7 years ago

3.10.0

7 years ago

3.9.0

7 years ago

3.8.0

7 years ago

3.7.0

7 years ago

3.6.2

7 years ago

3.6.1

7 years ago

3.6.0

7 years ago

3.5.0

7 years ago

3.4.0

8 years ago

3.3.0

8 years ago

3.2.1

8 years ago

3.2.0

8 years ago

3.1.2

8 years ago

3.1.1

8 years ago

3.1.0

8 years ago

3.0.1

8 years ago

3.0.0

9 years ago

2.1.0

9 years ago

2.0.0

9 years ago

1.8.0

9 years ago

1.7.0

9 years ago

1.6.1

9 years ago

1.6.0

9 years ago

1.5.1

9 years ago

1.5.0

9 years ago

1.4.0

9 years ago

1.3.0

9 years ago

1.2.2

9 years ago

1.2.1

9 years ago

1.1.0

9 years ago

1.0.3

10 years ago

1.0.2

10 years ago

1.0.1

10 years ago

1.0.0

10 years ago

0.1.0

10 years ago