vue-pinch-scroll-zoom
Vue component that provides content scrolling and zooming using mouse events or two fingers pinch on a mobile devices.
Installation
npm i @coddicat/vue-pinch-scroll-zoom
Usage
template:
<PinchScrollZoom
ref=”zoomer”
:width=”300″
:height=”400″
:scale=”scale”
@scaling=”scalingHandler”
style=”border: 1px solid black”
>
<img src=”https://picsum.photos/600/1000″ width=”300″ height=”400″ />
</PinchScrollZoom>
script:
import PinchScrollZoom, { PinchScrollZoomEmitData } from “@coddicat/vue-pinch-scroll-zoom”;
export default Vue.extend({
data: () => ({
scale: 2
}),
components: {
PinchScrollZoom,
},
methods: {
scalingHandler(e: PinchScrollZoomEmitData ): void {
console.log(e);
},
reset() {
this.$refs.zoomer.setData({
scale: 1,
originX: 0,
originY: 0,
translateX: 0,
translateY: 0
});
}
}
})
Props
the following properties don’t support the “.async” modifier
name
required
description
default
width
yes
visible area width
height
yes
visible area height
contentWidth
no
should be defined when content width larger than container width
contentHeight
no
should be defined when content height larger than container height
minScale
no
minimum allowable scaling
0.3
maxScale
no
maximum allowable scaling
5
within
no
limit scrolling of content to its borders
true
wheelVelocity
no
zoom velocity when mouse wheel
0.001
scale
no
scale of the content
1
origin-x
no
transform-origin-x
width/2
origin-y
no
transform-origin-y
height/2
translate-x
no
transform: translateX
0
translate-y
no
transform: translateY
0
throttleDelay
no
rendering delay (milliseconds)
25
draggable
no
draggable of/off
true
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
Methods
.SetData(data: PinchScrollZoomSetData);
export interface PinchScrollZoomSetData {
scale: number;
originX: number;
originY: number;
translateX: number;
translateY: number;
}