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

Navigate pdf pages in presentation mode using mousewheel/trackpad

GitOrigin-RevId: 960e3456bb02e2286776632638ad1e3892f59c6a
This commit is contained in:
David 2024-08-19 14:17:04 +01:00 committed by Copybot
parent 9416e69647
commit ced42ec748

View file

@ -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')