Skip to content

Pins

This plugin helps you position elements over Panzoom content so that they stay in the same place after any transformation (zoom, rotate, flip, etc.).

Usage

Include plugin's JS file and optionally include plugin's CSS file.

You are not required to use plugin's CSS file - you can just absolutely position your elements in the center of the container with just a few lines of CSS.

js
import { Pins } from "@fancyapps/ui/dist/panzoom/panzoom.pins.js";
import "@fancyapps/ui/dist/panzoom/panzoom.pins.css";

Pass Pins to Panzoom constructor or use plugins option. This plugin has no options.

js
const container = document.getElementById("myPanzoom");
const options = {
  // Your custom options
};

Panzoom(container, options, { Pins }).init();

Use an inner wrapping element with the class name f-panzoom__wrapper and place your elements along with your content.

Add data-x and data-y data attributes to specify the position above the content. These both attributes can contain numeric values or percentages. The starting point is in the upper left corner.

For example, data-x="0%" data-y="0%" would place your element in the top left corner of the content, while data-x="50%" data-y="50%" would place your element in the middle.

js
<div class="f-panzoom" id="myPanzoom">
  <div class="f-panzoom__wrapper">
    <div class="f-panzoom__pin" data-x="56%" data-y="60%">
      <svg>...</svg>
    </div>
    <img
      class="f-panzoom__content"
      src="https://lipsum.app/id/15/1600x1200"
      alt="Sample image"
      width="1600"
      height="1200"
    />
  </div>
</div>

Examples

Basic example

Sample image

Combine

It is also possible to display pins while using the toolbar provided by the Controls plugin.

Sample image