vue-img-mapper
Version:
Vue Component to highlight interactive zones in images
157 lines (119 loc) • 6.71 kB
Markdown
# Vue Img Mapper
Vue Component to highlight interactive zones in images
> This repository is based on react-img-mapper but with vue support
```
1. Promise to be maintained this repository
2. Selected area will stay highlighted ( Single & Multiple ) with toggle and reset feature
3. New Properties: Natural Dimensions, RerenderProps
4. Image Reference in Width, Height and onLoad function to access image properties
5. Responsive Image Mapper
6. Compatible with nuxt.js
```
## Installation
Package: [vue-img-mapper](https://www.npmjs.com/package/vue-img-mapper)
**NPM**
```
npm install vue-img-mapper --save
```
**Yarn**
```
yarn add vue-img-mapper
```
## Demo & Examples
Live demo: [demo](https://img-mapper.github.io/react-docs)
To run the example locally
```
git clone https://github.com/img-mapper/react-docs.git
npm install
npm start
```
Then open [`localhost:3000`](http://localhost:3000) in a browser.
If you want to change something and want to make a build file, you just need to run `npm run build`
> Currently, The documentation is in react, but I am trying to make vue docs as soon as possible
## Usage
Import the component as you normally do, and add it wherever you like in your JSX views as below:
```javascript
<template>
<ImageMapper :src="src" :map="map" />
</template>
<script>
import ImageMapper from 'vue-img-mapper';
export default {
name: 'Mapper',
components: { ImageMapper },
computed: {
src: () => 'https://raw.githubusercontent.com/img-mapper/react-docs/master/src/assets/example.jpg',
map() {
return {
name: 'my-map',
// GET JSON FROM BELOW URL AS AN EXAMPLE
areas: 'https://raw.githubusercontent.com/img-mapper/react-docs/master/src/assets/example.json',
};
},
},
};
</script>
```
## Properties
|Props|Type|Description|Default|
|---|---|---|---|
|**src**|*string*|Image source url| **required**|
|**map**|*string*|Mapping description| { name: generated, areas: [ ] }|
|**areaKeyName**|*string*|default unique key name ( **required** for `stayHighlighted` )|id|
|**fillColor**|*string*|Fill color of the highlighted zone|rgba(255, 255, 255, 0.5)|
|**strokeColor**|*string*|Border color of the highlighted zone|rgba(0, 0, 0, 0.5)|
|**lineWidth**|*number*|Border thickness of the highlighted zone|1|
|**width**|*number \| func*|Image width, in function you will get image reference object|0|
|**height**|*number \| func*|Image height, in function you will get image reference object|0|
|**active**|*bool*|Enable/Disable highlighting|true|
|**disabled**|*bool*|Enable/Disable area listeners and highlighting|false|
|**imgWidth**|*number*|Original image width|0|
|**natural**|*bool*|Give the original dimensions ( height & width ) to canvas and image wrapper|false|
|**stayHighlighted**|*bool*|You can see the highlighted area after clicking on the particular area|false|
|**stayMultiHighlighted**|*bool*|You can see the multiple highlighted area after clicking on the particular area|false|
|**toggleHighlighted**|*bool*|You can toggle selected highlighted area|false|
|**responsive**|*bool*|responsive map in all resolution ( for enable it you need to specify parentWidth )|false|
|**parentWidth**|*number*|parent max width for responsive|0|
## Properties Callback
|Props callbacks|Called on|signature|
|---|---|---|
|**@load**|Image loading and canvas initialization completed|(imageRef: obj, parentDimensions: { width, height }): void|
|**@click**|Click on a zone in image|(area: obj, index: num, event): void|
|**@mouseenter**|Hovering a zone in image|(area: obj, index: num, event): void|
|**@mouseleave**|Leaving a zone in image|(area: obj, index: num, event): void|
|**@mousemove**|Moving mouse on a zone in image|(area: obj, index: num, event): void|
|**@mousedown**|Clicks any button of the mouse on a zone in image|(area: obj, index: num, event): void|
|**@mouseup**|Releases left click of the mouse on a zone in image|(area: obj, index: num, event): void|
|**@touchstart**|Start to touch the zone in image|(area: obj, index: num, event): void|
|**@touchend**|Releases touch from the zone in image|(area: obj, index: num, event): void|
|**@imageClick**|Click outside of a zone in image|(event): void|
|**@imageMouseMove**|Moving mouse on the image itself|(event): void|
## Methods
|Method|Description|
|---|---|
|**clearHighlightedArea**|Clear all selected highlighted area from your map|
## Map Properties
A map is an object describing highlighted areas in the image.
Its structure is similar to the HTML syntax of mapping:
- **map**: (*object*) Object to describe highlighted zones
- **name**: (*string*) Name of the map, used to bind to the image.
- **areas**: (*array*) Array of **area objects** - **area**: (*object*) Shaped like below :
|Property|Type|Description|Default|
|---|---|---|---|
|**id**|*string*|Uniquely identify an area. An index in an array is used if this value is not provided. You can set it with `areaKeyName` property|index|
|**shape**|*string*|Either `rect`, `circle` or `poly`|required|
|**coords**|*array of number*|Coordinates delimiting the zone according to the specified shape: <ul><li>**rect**: `top-left-X`,`top-left-Y`,`bottom-right-X`,`bottom-right-Y`</li><li>**circle**: `center-X`,`center-Y`,`radius`</li><li>**poly**: Every point in the polygon path as `point-X`,`point-Y`,...</li></ul>|required| |**active**|*string*|Enable/Disable highlighting|true|
|**disabled**|*string*|Enable/Disable area listeners and highlighting|false|
|**href**|*string*|Target link for a click in the zone (note that if you provide an onClick prop, `href` will be prevented)|undefined|
|**fillColor**|*string*|Fill color of the highlighted zone|rgba(255, 255, 255, 0.5)|
|**strokeColor**|*string*|Border color of the highlighted zone|rgba(0, 0, 0, 0.5)|
|**lineWidth**|*string*|Border thickness of the highlighted zone|1|
|**preFillColor**|*string*|Pre filled color of the highlighted zone|undefined|
When received from an event handler, an area is extended with the following properties:
|Property| type|Description|
|---|:---:|---|
|**scaledCoords**|*array of number*|Scaled coordinates|
|**center**|*array of number*|Coordinates positioning the center or centroid of the area: `[X, Y]`|
## License
Distributed with an MIT License. See LICENSE.txt for more details!
Copyright (c) 2021 Nisharg Shah