An open API service indexing awesome lists of open source software.

https://github.com/zenui-labs/zenui-image-react

Render responsive images with lazy loading and optimized performance using customizable placeholders and skeletons.
https://github.com/zenui-labs/zenui-image-react

lazy-image lazy-loading lazy-loading-components loading npm npm-package optimize-image placeholder react

Last synced: 4 months ago
JSON representation

Render responsive images with lazy loading and optimized performance using customizable placeholders and skeletons.

Awesome Lists containing this project

README

          

# ZenUI Image React

A highly customizable, performance-focused React component for lazy loading images with advanced features like placeholder effects, image optimization, and responsive loading.

![cover image](https://i.ibb.co.com/68GH4C4/package-cover.png "cover image")

### Try it with our [Playground](https://zenui.net/zenui-image-react-playground)

## Features

- 🎯 **Lazy Loading**: Load images only when they enter the viewport
- 🖼 **Placeholder Support**: Multiple placeholder types while images load
- 🎨 **Effect Transitions**: Smooth transitions with blur, opacity, or color effects
- 📱 **Responsive Images**: Automatic srcset and sizes generation
- ⚡ **Performance Optimized**: Intersection Observer for efficient lazy loading
- 🛠 **Highly Customizable**: Extensive props for fine-tuning behavior
- 📦 **Lightweight**: Small bundle size.

---

If our GitHub repository reaches 200 stars ⭐, we will proudly launch the Vue version of this package.

[**Star the Repository on GitHub**](https://github.com/Asfak00/zenui-image-react)

## Installation

```bash
npm install zenui-image-react
```

## Basic Usage

```jsx
import { LazyLoadImage } from 'zenui-image-react';

function MyComponent() {
return (

);
}
```

## Advanced Features

### 1. Placeholder Types

Choose from multiple placeholder types while your image loads:

```jsx
// Effect Placeholder (blur, opacity, or color)

// Custom Image Placeholder

// Custom Component Placeholder
}
/>
```

### 2. Image Optimization

Enable automatic responsive image optimization:

```jsx

```

### 3. Custom Loading Behavior

Control the intersection observer and loading offset:

```jsx
console.log('Image loaded')}
onError={(e) => console.error('Load failed:', e)}
/>
```

## API Reference

### Props

| Prop | Type | Default | Description |
|------|------|---------|-------------|
| `src` | string | Required | Image source URL |
| `alt` | string | `''` | Alt text for the image |
| `className` | string | `''` | CSS class name |
| `style` | object | `{}` | Inline styles |
| `placeholderType` | enum | `'none'` | Type of placeholder (`'none'`, `'effect'`, `'image'`, `'custom'`) |
| `effectType` | enum | `'blur'` | Effect type (`'blur'`, `'opacity'`, `'color'`) |
| `effectAmount` | number | `10` | Intensity of the effect |
| `placeholderImage` | string | - | URL for placeholder image |
| `customPlaceholder` | element | - | Custom React component as placeholder |
| `optimize` | boolean | `false` | Enable responsive image optimization |
| `quality` | number | `80` | Image quality (1-100) when optimize is true |
| `breakpoints` | object | - | Custom breakpoints for responsive loading |
| `imageWidths` | object | - | Width configurations for each breakpoint |
| `sizes` | string | - | Custom sizes attribute for responsive images |
| `useIntersectionObserver` | boolean | `true` | Enable/disable intersection observer |
| `offset` | number | `0` | Loading offset in pixels |
| `onLoad` | function | - | Callback when image loads |
| `onError` | function | - | Callback when image fails to load |

### Default Breakpoints

```javascript
{
xs: 320,
sm: 576,
md: 768,
lg: 992,
xl: 1200,
xxl: 1400
}
```

### Default Image Widths

```javascript
{
xs: [320],
sm: [576],
md: [768],
lg: [992],
xl: [1200],
xxl: [1400]
}
```

## Performance Tips

1. **Use WebP Format**: Provide WebP images when possible for better compression
2. **Optimize Image Dimensions**: Use appropriate image sizes for different breakpoints
3. **Enable Optimization**: Use the `optimize` prop for automatic responsive handling
4. **Adjust Loading Offset**: Set an appropriate `offset` based on your use case
5. **Choose Appropriate Quality**: Balance quality and file size with the `quality` prop

## License

MIT © Asfak Ahmed ( rahi )