added zoom in-out

This commit is contained in:
pramod.mahajan 2025-11-25 10:11:43 +05:30
parent 8ec62827d5
commit 92d17167b1

View File

@ -1,24 +1,48 @@
import { useState } from "react"; import { useState } from "react";
const PreviewDocument = ({ imageUrl }) => { const PreviewDocument = ({ imageUrl }) => {
const [loading, setLoading] = useState(true); const [loading, setLoading] = useState(true);
const [rotation, setRotation] = useState(0); const [rotation, setRotation] = useState(0);
const [scale, setScale] = useState(1);
const zoomIn = () => setScale((prev) => Math.min(prev + 0.2, 3));
const zoomOut = () => setScale((prev) => Math.max(prev - 0.2, 0.4));
const resetAll = () => {
setRotation(0);
setScale(1);
};
return ( return (
<> <>
<div className="d-flex justify-content-start"> <div className="d-flex justify-content-start gap-3 mb-2">
<i <i
className="bx bx-rotate-right cursor-pointer" className="bx bx-rotate-right cursor-pointer fs-4"
title="Rotate"
onClick={() => setRotation((prev) => prev + 90)} onClick={() => setRotation((prev) => prev + 90)}
></i> ></i>
<i
className="bx bx-zoom-in cursor-pointer fs-4"
title="Zoom In"
onClick={zoomIn}
></i>
<i
className="bx bx-zoom-out cursor-pointer fs-4"
title="Zoom Out"
onClick={zoomOut}
></i>
</div> </div>
<div <div
className="position-relative d-flex flex-column justify-content-center align-items-center" className="position-relative d-flex flex-column justify-content-center align-items-center overflow-hidden"
style={{ minHeight: "80vh" }} style={{ minHeight: "80vh" }}
> >
{loading && ( {loading && (
<div className="text-secondary text-center mb-2">Loading...</div> <div className="text-secondary text-center mb-2">
Loading...
</div>
)} )}
<div className="mb-3 d-flex justify-content-center align-items-center"> <div className="mb-3 d-flex justify-content-center align-items-center">
@ -30,18 +54,18 @@ const PreviewDocument = ({ imageUrl }) => {
maxHeight: "80vh", maxHeight: "80vh",
objectFit: "contain", objectFit: "contain",
display: loading ? "none" : "block", display: loading ? "none" : "block",
transform: `rotate(${rotation}deg)`, transform: `rotate(${rotation}deg) scale(${scale})`,
transition: "transform 0.3s ease", transition: "transform 0.3s ease",
cursor: "grab",
}} }}
onLoad={() => setLoading(false)} onLoad={() => setLoading(false)}
/> />
</div> </div>
<div className="position-absolute bottom-0 start-0 justify-content-center gap-2"> <div className="position-absolute bottom-0 start-0 m-2">
<button <button
className="btn btn-outline-secondary" className="btn btn-outline-secondary"
onClick={() => setRotation(0)} onClick={resetAll}
title="Reset Rotation"
> >
<i className="bx bx-reset"></i> Reset <i className="bx bx-reset"></i> Reset
</button> </button>
@ -51,4 +75,6 @@ const PreviewDocument = ({ imageUrl }) => {
); );
}; };
export default PreviewDocument; export default PreviewDocument;