react-sea-motion
Version:
A React component that adds fluid, sea-like motion effects to images
118 lines (100 loc) • 3.2 kB
Markdown
# React Sea Motion 🌊
A React component that adds fluid, sea-like motion effects to images using WebGL shaders.
## Installation
```bash
npm install react-sea-motion
```
## Usage
### Basic Usage
```jsx
import SeaMotion from 'react-sea-motion';
function App() {
return (
<SeaMotion
src="/path/to/your/image.jpg"
alt="Beautiful image with sea motion effect"
/>
);
}
```
### Advanced Usage
```jsx
import SeaMotion from 'react-sea-motion';
function App() {
return (
<SeaMotion
src="/path/to/your/image.jpg"
alt="Custom sea motion"
speed={0.5} // Animation speed (0.1 - 2.0)
intensity={1.2} // Effect intensity (0.1 - 3.0)
duration={10} // Stop animation after 10 seconds (optional)
className="my-sea-motion"
style={{
width: '400px',
height: '300px',
borderRadius: '10px'
}}
onLoad={() => console.log('Effect loaded!')}
onError={(error) => console.error('Error:', error)}
onAnimationEnd={() => console.log('Animation ended!')}
>
{/* Optional overlay content */}
<div style={{
position: 'absolute',
top: '50%',
left: '50%',
transform: 'translate(-50%, -50%)',
color: 'white',
fontSize: '24px'
}}>
Overlay Text
</div>
</SeaMotion>
);
}
```
### Timer Example
```jsx
import SeaMotion from 'react-sea-motion';
function App() {
return (
<SeaMotion
src="/path/to/your/image.jpg"
duration={5} // Animation will stop after 5 seconds
onAnimationEnd={() => {
console.log('Animation completed!');
// Handle animation end - maybe show a static image or start a new animation
}}
/>
);
}
```
## Props
| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `src` | `string` | - | Image source URL |
| `alt` | `string` | `''` | Alt text for accessibility |
| `className` | `string` | `''` | CSS class name |
| `style` | `CSSProperties` | `{}` | Inline styles |
| `speed` | `number` | `0.3` | Animation speed (0.1 - 2.0) |
| `intensity` | `number` | `1.0` | Effect intensity (0.1 - 3.0) |
| `duration` | `number` | `undefined` | Duration in seconds before stopping (infinite if undefined) |
| `children` | `ReactNode` | - | Optional overlay content |
| `onLoad` | `function` | - | Callback when effect loads |
| `onError` | `function` | - | Callback when error occurs |
| `onAnimationEnd` | `function` | - | Callback when animation stops due to timeout |
## Features
- 🌊 **Realistic sea motion** - Multiple wave layers with fractal noise
- ⚡ **WebGL powered** - Smooth 60fps animations using GPU acceleration
- 🎛️ **Customizable** - Adjustable speed and intensity
- ⏱️ **Timer control** - Set duration or run infinitely (default)
- 📱 **Responsive** - Automatically scales to container size
- 🔧 **TypeScript** - Full TypeScript support included
- 🎨 **Overlay support** - Add content on top of the effect
## Browser Support
- Chrome/Edge: ✅ Full support
- Firefox: ✅ Full support
- Safari: ✅ Full support
- IE11: ❌ Not supported (requires WebGL)
## License
MIT