4.6.0 • Published 20 days ago

@coddicat/vue-pinch-scroll-zoom v4.6.0

Weekly downloads
-
License
MIT
Repository
github
Last release
20 days ago

vue-pinch-scroll-zoom

Vue component that provides content scrolling and zooming using mouse events or two fingers pinch on a mobile devices

Important Note

As of the current version, this component is compatible and fully tested with Vue "^3.2.47". Please ensure that you are using this version of Vue or later for optimal performance and compatibility. We will continue to maintain and update this component to support later versions of Vue as they become available.

example:

Installation

npm i @coddicat/vue-pinch-scroll-zoom

Usage

main.ts:

import '@coddicat/vue-pinch-scroll-zoom/style.css';
<PinchScrollZoom
  ref="zoomer"
  within
  centered
  key-actions
  :width="300"
  :height="400"
  :min-scale="0.3"
  :max-scale="6"
  @scaling="e => onEvent('scaling', e)"
  @startDrag="e => onEvent('startDrag', e)"
  @stopDrag="e => onEvent('stopDrag', e)"
  @dragging="e => onEvent('dragging', e)"
  style="border: 1px solid black"
  :content-width="500"
  :content-height="500"
>
  <img src="https://picsum.photos/500/500" width="500" height="500" />
</PinchScrollZoom>
<script setup lang="ts">
import { ref, reactive } from 'vue';
import PinchScrollZoom, {
  type PinchScrollZoomEmitData,
  type PinchScrollZoomExposed
} from '@coddicat/vue-pinch-scroll-zoom';

const zoomer = ref<PinchScrollZoomExposed>();

function onEvent(name: string, e: PinchScrollZoomEmitData): void {
  state.eventName = name;
  state.eventData = e;
  state.scale = e.scale;
  state.originX = e.originX;
  state.originY = e.originY;
  state.translateX = e.translateX;
  state.translateY = e.translateY;
}

function reset(): void {
  zoomer.value?.setData({
    scale: 1,
    originX: 150,
    originY: 200,
    translateX: -100,
    translateY: -50
  });
}

Props

the following properties don't support the ".async" modifier

namerequireddescriptiondefault
widthyesvisible area width
heightyesvisible area height
content-widthnoshould be defined when content width is different from container width
content-heightnoshould be defined when content height is different from container height
minScalenominimum allowable scaling0.3
maxScalenomaximum allowable scaling5
withinnolimit scrolling of content to its borderstrue
wheelVelocitynozoom velocity when mouse wheel0.001
scalenoscale of the content1
origin-xnotransform-origin-xwidth/2
origin-ynotransform-origin-yheight/2
translate-xnotransform: translateX0
translate-ynotransform: translateY0
throttleDelaynorendering delay (milliseconds)25
draggablenodraggable of/offtrue
centerednocentralize content in visible areafalse
key-actionsnoenable key press events(focused) for zooming and movingfalse
tabindexnotabindex attribute for the visible area0 if keyActions enabled, value is required for key events
key-zoom-velocitynozoom velocity when zooming by key events0.2
key-move-velocitynomove velocity when moving by key events10
key-controlsnoRecords of keyCode and actionsSee PinchScrollZoomDefaultControls ('+', '-', arrows)
translate3dnoToggle between 'translate' and 'translate3d' transformationtrue

Events

the following events are emitted with the argument:

export interface PinchScrollZoomEmitData {
  x: number;
  y: number;
  scale: number;
  originX: number;
  originY: number;
  translateX: number;
  translateY: number;  
}
  • startDrag
  • stopDrag
  • dragging
  • scaling

Exposed Methods

Update the data

.setData(data: PinchScrollZoomSetData);

export interface PinchScrollZoomSetData {
    scale: number;
    originX: number;
    originY: number;
    translateX: number;
    translateY: number;
}

Centralize image content in the visible area

.centralize();

Move image content in the visible area

.manualMove(deltaX: number, deltaY: number);

Zoom image content in the visible area

.manualZoom(factor: number); //factor relative to the current value, so if current scale is 2 and execute .manualZoom(2) the new scale value will be 4
4.6.0

20 days ago

4.5.0

1 month ago

4.4.0

1 month ago

4.3.5

5 months ago

4.3.2

5 months ago

4.3.1

5 months ago

4.3.4

5 months ago

4.3.3

5 months ago

4.3.0

5 months ago

4.2.4

8 months ago

4.2.3

11 months ago

4.0.8

12 months ago

4.0.5

12 months ago

4.2.2

11 months ago

4.0.4

12 months ago

4.0.7

12 months ago

4.0.6

12 months ago

4.1.0

12 months ago

4.0.1

12 months ago

4.0.0

12 months ago

4.2.1

12 months ago

4.2.0

12 months ago

4.0.2

12 months ago

3.3.1

2 years ago

3.3.0

2 years ago

3.3.4

2 years ago

3.3.3

2 years ago

3.3.2

2 years ago

3.2.1

3 years ago

3.1.2

3 years ago

3.2.0

3 years ago

3.1.0

3 years ago

3.0.1

3 years ago

3.0.0

3 years ago

2.1.2

3 years ago

2.1.1

3 years ago

2.1.0

3 years ago

2.0.0

3 years ago

1.2.0

3 years ago

1.2.1

3 years ago

1.1.0

3 years ago

1.0.5

3 years ago

1.0.4

3 years ago

1.0.3

3 years ago

1.0.2

3 years ago

1.0.1

3 years ago

1.0.0

3 years ago