Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

rretta/image-pointer

Repository files navigation

Image Pointer Component

A React component for creating interactive images with clickable points connected to detailed information.

Features

  • ✨ Interactive: Clickable points on images
  • 🎨 Responsive: Adapts to different screen sizes
  • πŸŒ™ Dark Mode: Dark theme support
  • πŸ“± Modal: Full-size image view
  • πŸ”— Links: External link support
  • πŸ“ Dynamic Lines: Visual connections between points and information
  • ⚑ Optimized: Better performance and event handling

Installation

npm install react-image-pointer

Usage

import { ImagePointer } from 'react-image-pointer';
const App = () => {
 const itemData = {
 details: {
 title: "My Interactive Image",
 description: "Image description"
 },
 points: [
 {
 id: "1",
 x: 25, // Percentage from left
 y: 30, // Percentage from top
 info: {
 title: "Point 1",
 description: "Description of point 1"
 },
 link: {
 title: "Learn more",
 url: "https://example.com"
 },
 image: {
 src: "https://example.com/image.jpg",
 alt: "Point image"
 }
 },
 {
 id: "2",
 x: 75,
 y: 60,
 info: {
 title: "Point 2",
 description: "Description of point 2"
 }
 }
 ]
 };
 return (
 <ImagePointer
 src="https://example.com/main-image.jpg"
 maxHeight="600px"
 itemData={itemData}
 isDarkMode={false}
 />
 );
};

Props

Prop Type Required Default Description
src string βœ… - URL of the main image
itemData object βœ… - Data for points and information
maxHeight string ❌ "600px" Maximum height of the image
isDarkMode boolean ❌ false Enable dark mode

itemData Structure

{
 details: {
 title: string, // Main title
 description?: string // Optional description
 },
 points: [
 {
 id: string, // Unique point ID
 x: number, // X position in percentage (0-100)
 y: number, // Y position in percentage (0-100)
 info: {
 title: string, // Point title
 description: string // Point description
 },
 link?: { // Optional link
 title: string,
 url: string
 },
 image?: { // Optional image
 src: string,
 alt: string
 }
 }
 ]
}

Improvements in Current Version

Enhanced Modal

  • βœ… Correct background opacity
  • βœ… Close with Escape and click outside
  • βœ… Body scroll lock
  • βœ… Better responsive design
  • βœ… Smooth transitions

Main Component

  • βœ… Better state management with useCallback
  • βœ… More robust line calculation
  • βœ… Optimized event handling
  • βœ… Enhanced visual effects
  • βœ… Better responsive design
  • βœ… Continuous lines for better visibility

Interactivity

  • βœ… Hover effects on points
  • βœ… Smooth transitions
  • βœ… Better visual feedback
  • βœ… Improved accessibility

Complete Example

import React from 'react';
import { ImagePointer } from 'react-image-pointer';
const ExampleComponent = () => {
 const data = {
 details: {
 title: "iPhone 16 Pro",
 description: "Discover the most important features of the new iPhone 16 Pro"
 },
 points: [
 {
 id: "camera",
 x: 20,
 y: 25,
 info: {
 title: "Triple Camera System",
 description: "Professional camera system with 5x optical zoom"
 },
 link: {
 title: "View specifications",
 url: "https://apple.com/camera"
 },
 image: {
 src: "/images/camera-detail.jpg",
 alt: "Camera detail"
 }
 },
 {
 id: "screen",
 x: 80,
 y: 40,
 info: {
 title: "Super Retina XDR Display",
 description: "6.7-inch OLED display with 2796 x 1290 resolution"
 }
 }
 ]
 };
 return (
 <div className="container mx-auto p-4">
 <ImagePointer
 src="/images/iphone-16-pro.jpg"
 maxHeight="700px"
 itemData={data}
 isDarkMode={true}
 />
 </div>
 );
};
export default ExampleComponent;

License

MIT

About

Image Pointer Component

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

AltStyle γ«γ‚ˆγ£γ¦ε€‰ζ›γ•γ‚ŒγŸγƒšγƒΌγ‚Έ (->γ‚ͺγƒͺγ‚ΈγƒŠγƒ«) /