1.0.3 • Published 5 months ago

minox-img-optimizer v1.0.3

Weekly downloads
-
License
MIT
Repository
github
Last release
5 months ago

Minox Image Optimizer React

A React component for lazy loading optimized responsive images with placeholder and effects support.

Installation

You can install the package using npm:

npm install minox-img-optimizer

Features

  • Lazy loading images using Intersection Observer API
  • Fallback to scroll event listening
  • Customizable placeholder
  • Built-in placeholder effects (blur, opacity)
  • Custom skeleton support
  • Offset configuration for pre-loading
  • Image optimization based on breakpoints
  • Responsive images with custom breakpoints

Usage

Here's a basic usage example of the LazyLoadImage component:

import React from "react";
import LazyLoadImage from "minox-img-optimizer";

function App() {
  return (
    <LazyLoadImage
      src="your-image-url.jpg"
      placeholder="placeholder-image-url.jpg"
      alt="Description"
      placeholderEffect="blur"
      offset={100}
      optimize={true}
      breakpoints={{ small: 480, medium: 768, large: 1024 }}
    />
  );
}

export default App;

Props

PropTypeDefaultDescription
srcstringrequiredThe source URL of the image
altstring''Alt text for the image
placeholderstring''URL of the placeholder image
classNamestring''CSS class name (also tailwind classes supported)
styleobject{}Inline styles
placeholderEffect'blur' \| 'opacity' \| 'none''none'Effect to apply to placeholder
customSkeletonelementnullCustom skeleton component
offsetnumber0Offset in pixels for pre-loading
useIntersectionObserverbooleantrueUse Intersection Observer API
scrollbooleanfalseUse scroll event instead
onLoadfunction() => {}Called when image loads
onErrorfunction() => {}Called on load error
optimizebooleanfalseOptimize image loading based on breakpoints
breakpointsobject{}Custom breakpoints for responsive images

Prop Descriptions

  • src: The URL of the image to be loaded. This prop is required.
  • alt: The alt text for the image.
  • placeholder: The URL of the placeholder image to display while the main image is loading.
  • className: A CSS class name to apply to the image container. you can write here tailwind classes.
  • style: Inline styles to apply to the image container.
  • placeholderEffect: The effect to apply to the placeholder image. Can be 'blur', 'opacity', or 'none'.
  • customSkeleton: A custom skeleton component to display while the main image is loading.
  • offset: The offset in pixels to start loading the image before it enters the viewport.
  • useIntersectionObserver: Whether to use the Intersection Observer API for lazy loading. Defaults to true.
  • scroll: Whether to use the scroll event for lazy loading. Defaults to false.
  • onLoad: A callback function to be called when the main image loads successfully.
  • onError: A callback function to be called if there is an error loading the main image.
  • optimize: Whether to optimize image loading based on breakpoints. Defaults to false.
  • breakpoints: Custom breakpoints for responsive images. For example: { small: 480, medium: 768, large: 1024 }.

Example with All Props

Here's an example demonstrating the use of all props:

import React from "react";
import LazyLoadImage from "minox-img-optimizer";

function App() {
  const handleImageLoad = () => {
    console.log("Image loaded");
  };

  const handleImageError = () => {
    console.log("Failed to load image");
  };

  return (
    <LazyLoadImage
      src="your-image-url.jpg"
      alt="Description"
      placeholder="placeholder-image-url.jpg"
      className="custom-class"
      style={{ borderRadius: "8px" }}
      placeholderEffect="blur"
      customSkeleton={<div className="skeleton-loader">Loading...</div>}
      offset={100}
      useIntersectionObserver={true}
      scroll={false}
      onLoad={handleImageLoad}
      onError={handleImageError}
      optimize={true}
      breakpoints={{ small: 480, medium: 768, large: 1024 }}
    />
  );
}

export default App;

Advanced Features

Image Optimization

By setting the optimize prop to true, the component will load different image versions based on the current breakpoint. This helps in reducing the loading time and improving performance.

<LazyLoadImage
  src="your-image-url.jpg"
  placeholder="placeholder-image-url.jpg"
  alt="Description"
  optimize={true}
  breakpoints={{ small: 480, medium: 768, large: 1024 }}
/>

Responsive Images with Custom Breakpoints

You can provide custom breakpoints using the breakpoints prop. The component will automatically adjust the image source based on these breakpoints.

<LazyLoadImage
  src="your-image-url.jpg"
  placeholder="placeholder-image-url.jpg"
  alt="Description"
  breakpoints={{ small: 480, medium: 768, large: 1024, xlarge: 1200 }}
/>

License

MIT © MHMIYAD. All rights reserved.