Code Monkey home page Code Monkey logo

react-visibility-sensor's Introduction

React Visibility Sensor

Build Status

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

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 the example

To run the example locally:

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

General usage goes something like:

function render () {
  var VisibilitySensor = require('react-visibility-sensor');

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

  return (
    <VisibilitySensor onChange={onChange} />
  );
}

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

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) the default usage of Visibility Sensor is to trigger a check on user scrolling, by checking this as 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 1500) 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:

  • Andrew Hong
  • Oleg Slobodskoi
  • EugeneHlushko
  • Stefan B
  • Radu-Sebastian Amarie
  • Roope Merikukka
  • Christian Davis
  • Anton Fedchenko
  • Mateusz Burzyński
  • Zak Linder
  • Andarist
  • Andy Edwards
  • Bram Schulting
  • Dan Abramov
  • Daniel Stefanovic
  • Eric Bower
  • Julien Bachmann
  • Neehar Venugopal
  • Rubens Mariuzzo
  • Tim Tyrrell

License

MIT

react-visibility-sensor's People

Contributors

andarist avatar b-stefan avatar bramschulting avatar danistefanovic avatar eugenehlushko avatar falcon1kr avatar gaearon avatar jedwards1211 avatar joshwnj avatar julienbachmann avatar kof avatar kompot avatar mackenziekira avatar neeharv avatar neurosnap avatar npmcdn-to-unpkg-bot avatar rmariuzzo avatar stevewillard avatar timtyrrell avatar zakness avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.