Skip to content

Commit a63e36d

Browse files
committed
feat: add mouse wheel scroll to the viewer
1 parent 269fa44 commit a63e36d

1 file changed

Lines changed: 30 additions & 0 deletions

File tree

src/components/newPdfViewer.tsx

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,11 @@ interface PdfViewerProps {
3131
name: string;
3232
}
3333

34+
interface WheelZoomProps {
35+
documentId: string;
36+
viewerRef: React.RefObject<HTMLDivElement>;
37+
}
38+
3439
function useBreakpoint() {
3540
const [width, setWidth] = useState(() => window.innerWidth);
3641

@@ -243,6 +248,30 @@ const Controls = memo(function Controls({documentId, toggleFullscreen, isFullscr
243248
)
244249
});
245250

251+
function WheelZoom({documentId, viewerRef}: WheelZoomProps){
252+
const { provides: zoomProv } = useZoom(documentId);
253+
254+
const handleWheel = useCallback((e: WheelEvent) => {
255+
if (e.ctrlKey && zoomProv) {
256+
e.preventDefault();
257+
if (e.deltaY < 0) {
258+
zoomProv.zoomIn();
259+
} else {
260+
zoomProv.zoomOut();
261+
}
262+
}
263+
}, [zoomProv]);
264+
265+
useEffect(() => {
266+
const viewer = viewerRef.current;
267+
if (!viewer) return;
268+
viewer.addEventListener("wheel", handleWheel, { passive: false });
269+
return () => viewer.removeEventListener("wheel", handleWheel);
270+
}, [handleWheel]);
271+
272+
return null;
273+
}
274+
246275
export default function PDFViewer({ url, name }: PdfViewerProps) {
247276
const { engine, isLoading } = usePdfiumEngine();
248277
const {isMobile, isSmall} = useBreakpoint();
@@ -301,6 +330,7 @@ export default function PDFViewer({ url, name }: PdfViewerProps) {
301330
{({ activeDocumentId }) =>
302331
activeDocumentId && (
303332
<>
333+
<WheelZoom documentId={activeDocumentId} viewerRef={viewerRef} />
304334
{(isMobile && !isFullscreen) &&
305335
<Controls
306336
documentId={activeDocumentId}

0 commit comments

Comments
 (0)