Advertisement
P1ayer4312

PanAndZoomComponent

Jul 7th, 2023
1,924
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. import React from "react";
  2. import { TransformWrapper, TransformComponent } from "react-zoom-pan-pinch";
  3.  
  4. const PanningInteractionHandler = (instance, state) => {
  5.   if (state?.positionX >= 0 && state?.positionY >= 0 && state?.scale <= 1) {
  6.     instance.setup.panning.disabled = true;
  7.   } else {
  8.     instance.setup.panning.disabled = false;
  9.   }
  10. };
  11.  
  12. export default function PanAndZoomComponent(props) {
  13.   return (
  14.     <TransformWrapper
  15.       centerOnInit={true}
  16.       centerZoomedOut={true}
  17.       onZoomStop={(ref) => {
  18.         PanningInteractionHandler(ref.instance, ref.state);
  19.       }}
  20.       onPanning={(ref) => {
  21.         PanningInteractionHandler(ref.instance, ref.state);
  22.       }}
  23.       onInit={(ref) => {
  24.         ref.instance.setup.panning.disabled = true;
  25.       }}
  26.     >
  27.       {({ zoomIn, zoomOut, resetTransform, centerView, instance, state }) => (
  28.         <div>
  29.           <TransformComponent contentStyle={{ width: "100%" }}>
  30.             <img />
  31.           </TransformComponent>
  32.           <div>
  33.             <button
  34.               onClick={() => {
  35.                 zoomIn();
  36.                 instance.setup.panning.disabled = false;
  37.               }}
  38.             >
  39.               <img src={zoomInIcon} alt="Zoom In Icon" width={25} height={25} />
  40.             </button>
  41.             <button
  42.               onClick={() => {
  43.                 zoomOut();
  44.                 PanningInteractionHandler(instance, state);
  45.               }}
  46.             >
  47.               <img
  48.                 src={zoomOutIcon}
  49.                 alt="Zoom Out Icon"
  50.                 width={25}
  51.                 height={25}
  52.               />
  53.             </button>
  54.             <button
  55.               onClick={() => {
  56.                 resetTransform();
  57.                 instance.setup.panning.disabled = true;
  58.               }}
  59.             >
  60.               <img src={resetIcon} alt="Reset Icon" width={25} height={25} />
  61.             </button>
  62.             <button onClick={() => centerView()}>
  63.               <img src={centerIcon} alt="Center Icon" width={25} height={25} />
  64.             </button>
  65.           </div>
  66.         </div>
  67.       )}
  68.     </TransformWrapper>
  69.   );
  70. }
  71.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement