VueImagineVueImagine
Home
ImageZoomer
ImageSlider
AdaptiveDiv
GitHub
Home
ImageZoomer
ImageSlider
AdaptiveDiv
GitHub
  • ImageZoomer

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(): void

    Zoom in content

  • zoomOut(): void

    Zoom 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 azoom is zoom value by default.

  • unscale(x: number, y: number, azoom?: number): { x: number, y: number }

    Translate image coordinates to client coordinates. Parameter azoom is zoom value by default.

  • function fit(mode: 'contain' | 'cover')

    Fit content into client rect

Slots

  • default
Edit this page
Last Updated:: 5/30/25, 7:06 AM