Просмотр исходного кода

Merge pull request #19998 from overleaf/dp-presentation-mousewheel

Navigate pdf pages in presentation mode using mousewheel/trackpad

GitOrigin-RevId: 960e3456bb02e2286776632638ad1e3892f59c6a
David 2 лет назад
Родитель
Сommit
ced42ec748
1 измененных файлов с 27 добавлено и 1 удалено
  1. 27 1
      services/web/frontend/js/features/pdf-preview/hooks/use-presentation-mode.ts

+ 27 - 1
services/web/frontend/js/features/pdf-preview/hooks/use-presentation-mode.ts

@@ -74,17 +74,43 @@ export default function usePresentationMode(
     [nextPage, previousPage]
     [nextPage, previousPage]
   )
   )
 
 
+  const isMouseWheelScrollingRef = useRef(false)
+
+  const mouseWheelListener = useCallback(
+    (event: WheelEvent) => {
+      if (
+        !isMouseWheelScrollingRef.current &&
+        !event.ctrlKey // Avoid trackpad pinching
+      ) {
+        isMouseWheelScrollingRef.current = true
+
+        if (event.deltaY > 0) {
+          nextPage()
+        } else {
+          previousPage()
+        }
+
+        setTimeout(() => {
+          isMouseWheelScrollingRef.current = false
+        }, 200)
+      }
+    },
+    [nextPage, previousPage]
+  )
+
   useEffect(() => {
   useEffect(() => {
     if (presentationMode) {
     if (presentationMode) {
       window.addEventListener('keydown', arrowKeyListener)
       window.addEventListener('keydown', arrowKeyListener)
       window.addEventListener('click', clickListener)
       window.addEventListener('click', clickListener)
+      window.addEventListener('wheel', mouseWheelListener)
 
 
       return () => {
       return () => {
         window.removeEventListener('keydown', arrowKeyListener)
         window.removeEventListener('keydown', arrowKeyListener)
         window.removeEventListener('click', clickListener)
         window.removeEventListener('click', clickListener)
+        window.removeEventListener('wheel', mouseWheelListener)
       }
       }
     }
     }
-  }, [presentationMode, arrowKeyListener, clickListener])
+  }, [presentationMode, arrowKeyListener, clickListener, mouseWheelListener])
 
 
   const requestPresentationMode = useCallback(() => {
   const requestPresentationMode = useCallback(() => {
     sendMB('pdf-viewer-enter-presentation-mode')
     sendMB('pdf-viewer-enter-presentation-mode')