🔍 Component visibility sensor wrapper to sense whether or not a component is in viewport with configurable inset thresholds & percent visibility callback.

Using yarn
yarn add @futurejj/react-native-visibility-sensor
using npm:
npm install @futurejj/react-native-visibility-sensor
import React, { useState } from 'react';
import { ScrollView, Text } from 'react-native';
import { VisibilitySensor } from '@futurejj/react-native-visibility-sensor';
export default function VisibilitySensorExample() {
const [isVisible, setIsVisible] = useState(false);
const [percentVisible, setPercentVisible] = useState<number>(0);
return (
<ScrollView>
<VisibilitySensor
onChange={setIsVisible}
onPercentChange={setPercentVisible} // optional callback for % change
threshold={{ top: 100, bottom: 100 }}
style={[styles.item, { backgroundColor: isVisible ? 'green' : 'red' }]}>
{/* Visibility state */}
<Text>This View is currently visible? {isVisible ? 'yes' : 'no'}</Text>
{/* Percent visibility state */}
<Text>{`Percent visible: ${percentVisible}%`}</Text>
</VisibilitySensor>
</ScrollView>
);
}
VisibilitySensorProps extends ViewProps from React Native, which includes common properties for all views, such as style, onLayout, etc.
| Property | Type | Required | Description |
|---|---|---|---|
onChange |
(visible: boolean) => void |
Yes | Callback function that fires when visibility changes. |
onPercentChange |
(percentVisible: number) => void |
No | Callback function that fires when visibility % changes. |
disabled |
boolean |
No | If true, disables the sensor. |
triggerOnce |
boolean |
No | If true, the sensor will only trigger once. |
delay |
number or undefined |
No | The delay in milliseconds before the sensor triggers. |
threshold |
VisibilitySensorThreshold | No | Defines the part of the view that must be visible for the sensor to trigger. |
Additionally, all properties from ViewProps are also applicable.
| Property | Type | Required | Description |
|---|---|---|---|
top |
number |
No | The top threshold value for visibility. |
bottom |
number |
No | The bottom threshold value for visibility. |
left |
number |
No | The left threshold value for visibility. |
right |
number |
No | The right threshold value for visibility. |
See the contributing guide to learn how to contribute to the repository and the development workflow.
MIT
$ claude mcp add react-native-visibility-sensor \
-- python -m otcore.mcp_server <graph>