Allows you to take advantage of the device's accelerometer on a very easy and uncomplicated way.
npm install --save react-accelerometer // or yarn add react-accelerometer
import React, { Component, PropTypes } from 'react' import { render } from 'react-dom' import ReactAccelerometer from 'react-accelerometer' const AwesomeComponent = () => ( <ReactAccelerometer> {(position, rotation) => ( <ul> <li>x: {position.x}</li> <li>y: {position.y}</li> <li>z: {position.z}</li> <li>rotation alpha: {rotation.alpha}</li> <li>rotation beta: {rotation.beta}</li> <li>rotation gamma: {rotation.gamma}</li> </ul> )} </ReactAccelerometer> ) render(<AwesomeComponent />, document.querySelector('#app'))
static propTypes = { /** * You have to pass a function as the children and return a valid * React component. If the device supports the "devicemotion" API, * this function will receive two arguments: * - pos <Object> - with the "x", "y", "z" properties * - rotation <Object> - with the "alpha", "beta", "gamma" */ children: PropTypes.func.isRequired, /** * Multiplies the `x`, `y` and `z` positions by this amount * @default 1 */ multiplier: PropTypes.bool, /** * Takes in consideration the gravity or not * @default true */ useGravity: PropTypes.bool, }
I highly recommend you to combine this component with React-Motion to get a smoother transition between the accelerometer's values:
import React, { Component, PropTypes } from 'react' import { render } from 'react-dom' import ReactAccelerometer from 'react-accelerometer' import { Motion, spring } from 'react-motion' /* Combining React-Accelerometer with React-Motion */ const ReactAccelerometerMotion = ({ children }) => ( <ReactAccelerometer> {({ x, y }) => ( <Motion style={{ x: spring(x), y: spring(y) }}> {pos => children(pos)} </Motion> )} </ReactAccelerometer> ) const AwesomeComponent = () => ( <ReactAccelerometerMotion> {({ x, y }) => ( <img src='image.jpg' style={{ transform: `translate3d(${x}px, ${y}px, 0)` }} /> )} </ReactAccelerometerMotion> ) render(<AwesomeComponent />, document.querySelector('#app'))
npm test // or yarnpkg test
MIT