ImageZoomer
ImageZoomer component allows you to zoom an image inside a rectagle. This page demonstrates various application options.
View a picture
Use mouse wheel for zoom-in or zoom-out
<template>
<ImageZoomer ref="zoomer" class="red-border"
v-model:zoom="zoom"
v-model:scrollX="scrollX"
v-model:scrollY="scrollY"
:transition="transition">
<img src="/images/DSC08427.JPG?url" alt="" class="client-image" />
</ImageZoomer>
<div class="controls">
<label>
<span>zoom:</span>
<input type="number" step="0.3" v-model="zoom">
</label>
<label>
<span>scrollX:</span>
<input type="number" step="10" v-model="scrollX">
</label>
<label>
<span>scrollY:</span>
<input type="number" step="10" v-model="scrollY">
</label>
<label>
<span>transition:</span>
<div style="text-align: left;">
<input type="checkbox" v-model="transition" true-value="all 0.2s ease" false-value="none">
{{ transition }}
</div>
</label>
</div>
</template>
<style lang="css" scoped>
img.client-image {
width: 100%;
height: 100%;
object-fit: cover;
}
</style>
<script lang="js">
import ImageZoomer from '@/ImageZoomer.vue';
import './style.css';
export default {
components: { ImageZoomer },
data() {
return {
zoom: 1,
scrollX: 0,
scrollY: 0,
transition: 'all 0.2s ease',
};
},
}
</script>
View not only pictires
You can zoom any content. For example - text, tables, svg, etc...
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima assumenda consectetur culpa fuga nulla ullam. In, libero.
<template>
<ImageZoomer ref="zoomer" transition="all 0.05s ease" class="red-border">
<div style="max-width: 600px;">
<p>
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque
magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima
assumenda consectetur culpa fuga nulla ullam. In, libero.
</p>
<p>
Lorem ipsum dolor sit, amet consectetur adipisicing elit. Quis praesentium cumque
magnam odio iure quidem, quod illum numquam possimus obcaecati commodi minima
assumenda consectetur culpa fuga nulla ullam. In, libero.
</p>
</div>
</ImageZoomer>
</template>
<script>
import ImageZoomer from '@/ImageZoomer.vue';
export default {
components: { ImageZoomer },
}
</script>
Fit content
And other methods.

<template>
<ImageZoomer ref="zoomer" class="red-border"
:zoom="0.5"
:minZoom="0.2"
:maxZoom="1"
transition="all 0.3s ease">
<img src="/images/cat.jpg?url" alt="" />
</ImageZoomer>
<div class="controls">
<button @click="$refs.zoomer.zoomIn()">Zoom In</button>
<button @click="$refs.zoomer.zoomOut()">Zoom Out</button>
<button @click="$refs.zoomer.fit('contain')">Contain</button>
<button @click="$refs.zoomer.fit('cover')">Cover</button>
</div>
</template>
<script lang="js">
import ImageZoomer from '@/ImageZoomer.vue';
import './style.css';
export default {
components: { ImageZoomer },
}
</script>
API
Models
zoom: Zoom value (default 1)scrollX: Horizontal scroll in pixels (default 0)scrollY: Vertical scroll in pixels (default 0)
Properties
minZoom: Minimum zoom value (default 0.1)maxZoom: Maximum zoom value (default 10)zoomFactor: Multiplier for zoom (default 1.1)transition: CSS transition rule (default 'none')
Methods
zoomIn(): voidZoom in content
zoomOut(): voidZoom out content
toClient(x: number, y: number): { x: number, y: number }Convert screen position to client (component) position. Generally used to convert mouse coordinates to position in bounding rectangle.
scale(x: number, y: number, azoom?: number): { x: number, y: number }Translate client coordinates to image coordinates. Parameter
azoomis zoom value by default.unscale(x: number, y: number, azoom?: number): { x: number, y: number }Translate image coordinates to client coordinates. Parameter
azoomis zoom value by default.function fit(mode: 'contain' | 'cover')Fit content into client rect
Slots
- default
