vue-svg-pan-zoom

Vue component for svg-pan-zoom
59,567
Install
npm install vue-svg-pan-zoom
Latest Version:2.1.0
Vue:3
Older releases:2
License:MIT
Last Updated:Jun 10, 2022
Links: npm
Maintainer: yanick

vue-svg-pan-zoom : Vue 3 component for SVG-Pan-Zoom

This module is a very simple Vue 3 component providing the goodness of SVG-Pan-Zoom for SVG elements.

/!\ WARNING: the module is young, basic, probably will have its API change with no notice, and likely to have bugs. Use at your own risk, send patches for my eternal gratitude.

Basic Use

In a Single File Component:

<template>
  <SvgPanZoom
    style="width: 500px; height: 500px; border:1px solid black;"
    :zoomEnabled="true"
    :controlIconsEnabled="true"
    :fit="false"
    :center="true"
  >
    <svg>
      <circle x="10" y="10" r="5" />
    </svg> </SvgPanZoom
  >`
</template>

<script>
import SvgPanZoom from "vue-svg-pan-zoom";

export default {
  components: { SvgPanZoom }
};
</script>

Notes

Currently the SvgPanZoom component only works with a svg child -- embed won't work.

Props

SvgPanZoom accepts as props most svg-pan-zoom options:

attribute default
zoomEnabled true
controlIconsEnabled false
fit true
panEnabled true
dblClickZoomEnabled true
mouseWheelZoomEnabled true
preventMouseEventsDefault true
contain false
center true
viewportSelector .svg-pan-zoom_viewport
zoomScaleSensitivity 0.2
minZoom 0.5
maxZoom 10
refreshRate auto
event arguments
beforeZoom (oldScale: number, newScale: number)
onZoom (newScale: number)
beforePan (oldPan: SvgPanZoom.Point, newPan: SvgPanZoom.Point)
onPan (newPan: SvgPanZoom.Point)
onUpdatedCTM (newCTM: SVGMatrix)
created (spz: SvgPanZoom.Instance)
thumbnailCreated (spz: SvgPanZoom.Instance)

svgpanzoom object

To access the created svgpanzoom javascript object, you can listen to the created event on the SvgPanZoom component.

<template>
  <div>
    <input type="button" value="center me" @click="center" />
    <SvgPanZoom
      style="width: 500px; height: 500px; border:1px solid black;"
      :fit="false"
      @created="registerSvgPanZoom"
    >
      <RawTiger />
    </SvgPanZoom>
  </div>
</template>

<script>
import RawTiger from "./RawTiger.vue";
import SvgPanZoom from "vue-svg-pan-zoom";

export default {
  components: { SvgPanZoom, RawTiger },
  data: () => ({ svgpanzoom: null }),
  methods: {
    registerSvgPanZoom(svgpanzoom) {
      this.svgpanzoom = svgpanzoom;
    },
    center() {
      if (!this.svgpanzoom) return;

      this.svgpanzoom.center();
    }
  }
};
</script>

Use with thumbnails

In a Single File Component:

<template>
  <SvgPanZoom style="width: 300px; height: 500px; border:1px solid black; ">
    <template #default>
      <svg>...</svg>
    <template>
    <template #thumbnail>...</template>
  </SvgPanZoom>
</template>

<script>
import SvgPanZoom from "vue-svg-pan-zoom";

export default {
  components: { SvgPanZoom }
};
</script>

Just like the main SvgPanZoom component, the thumbnail slot needs to be assigned to a svg node -- embed won't work.

Storybook demos

To run Storybook stories duplicating the demos of the main SVG-Pan-Zoom project, do

$ yarn install --dev
$ yarn storybook

Related Packages

@jt-icons/icon-vue-components

Vue components of JT Icons collection.

2,961 1
@svgv/core

Node.js API to transform SVGs into Vue components.

1,525 4
@k-l-lambda/web-widgets

A package contains some utility vue.js components and modules.

831 0
svg-to-vue

Utility to convert SVG code into Vue component definition

2,667,077 31
vicons

SVG Vue components integrated from `fluentui-system-icons` and `ionicons`.

53,979

Version History

Version Released License
2.1.0 MIT
2.0.0 MIT
1.1.0 MIT
1.0.1 MIT
1.0.0 MIT