From b2be4f7e78663f14ecb4f1844d226fca0c1c63d0 Mon Sep 17 00:00:00 2001 From: FatttSnake Date: Fri, 22 Sep 2023 14:45:02 +0800 Subject: [PATCH 1/5] Add logo.png to public --- public/logo.png | Bin 0 -> 44116 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 public/logo.png diff --git a/public/logo.png b/public/logo.png new file mode 100644 index 0000000000000000000000000000000000000000..f3703ebc6dca8e8f596a7ad3beca0a607e4a7a1b GIT binary patch literal 44116 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 Date: Fri, 22 Sep 2023 16:23:25 +0800 Subject: [PATCH 2/5] Remove unused console.log --- src/components/home/index.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/src/components/home/index.tsx b/src/components/home/index.tsx index cc26b1a..3f938db 100644 --- a/src/components/home/index.tsx +++ b/src/components/home/index.tsx @@ -124,7 +124,6 @@ const Home: React.FC = () => { if (event.key === 'ArrowDown') { handleScrollDown() } - console.log(content.length) } const content = [ From 37f35aa0d0e7ec4c67b986cd49c77d19e5ad3438 Mon Sep 17 00:00:00 2001 From: FatttSnake Date: Fri, 22 Sep 2023 16:24:44 +0800 Subject: [PATCH 3/5] Add vertical and horizontal scroll prevent --- src/components/common/HideScrollbar.tsx | 190 +++++++++++++++++------- src/pages/MainFramework.tsx | 2 +- 2 files changed, 141 insertions(+), 51 deletions(-) diff --git a/src/components/common/HideScrollbar.tsx b/src/components/common/HideScrollbar.tsx index c3ec975..1fcdaa7 100644 --- a/src/components/common/HideScrollbar.tsx +++ b/src/components/common/HideScrollbar.tsx @@ -4,16 +4,20 @@ import '@/assets/css/components/common/hide-scrollbar.scss' interface HideScrollbarProps extends React.DetailedHTMLProps, HTMLDivElement> { isPreventScroll?: boolean + isPreventVerticalScroll?: boolean + isPreventHorizontalScroll?: boolean + isShowVerticalScrollbar?: boolean + isShowHorizontalScrollbar?: boolean } export interface HideScrollbarElement { - scrollTo(x: number, y: number): void - scrollX(x: number): void - scrollY(y: number): void - scrollLeft(length: number): void - scrollRight(length: number): void - scrollUp(length: number): void - scrollDown(length: number): void + scrollTo(x: number, y: number, smooth?: boolean): void + scrollX(x: number, smooth?: boolean): void + scrollY(y: number, smooth?: boolean): void + scrollLeft(length: number, smooth?: boolean): void + scrollRight(length: number, smooth?: boolean): void + scrollUp(length: number, smooth?: boolean): void + scrollDown(length: number, smooth?: boolean): void getX(): number getY(): number addEventListenerWithType( @@ -40,19 +44,79 @@ export interface HideScrollbarElement { const HideScrollbar = forwardRef((props, ref) => { const rootRef = useRef(null) + const lastTouchPosition = useRef<{ x: number; y: number }>({ x: -1, y: -1 }) const [verticalScrollbarWidth, setVerticalScrollbarWidth] = useState(0) const [horizontalScrollbarWidth, setHorizontalScrollbarWidth] = useState(0) - const { isPreventScroll, ..._props } = props - const handleDefaultWheel = useCallback((event: WheelEvent) => { - if (!event.altKey && !event.ctrlKey) { - event.preventDefault() - } - }, []) + const { + isPreventScroll, + isPreventVerticalScroll, + isPreventHorizontalScroll, + isShowVerticalScrollbar, + isShowHorizontalScrollbar, + ..._props + } = props - const handleDefaultTouchmove = useCallback((event: TouchEvent) => { - event.preventDefault() - }, []) + const handleDefaultWheel = useCallback( + (event: WheelEvent) => { + if (!event.altKey && !event.ctrlKey) { + if (isPreventScroll) { + event.preventDefault() + return + } + if (isPreventVerticalScroll && !event.shiftKey && !event.deltaX) { + event.preventDefault() + return + } + if (isPreventHorizontalScroll && (event.shiftKey || !event.deltaY)) { + event.preventDefault() + return + } + } + }, + [isPreventScroll, isPreventHorizontalScroll, isPreventVerticalScroll] + ) + + const handleDefaultTouchStart = useCallback( + (event: TouchEvent) => { + if (event.touches.length !== 1 || isPreventScroll) { + lastTouchPosition.current = { x: -1, y: -1 } + return + } + + const { clientX, clientY } = event.touches[0] + lastTouchPosition.current = { x: clientX, y: clientY } + }, + [isPreventScroll] + ) + + const handleDefaultTouchmove = useCallback( + (event: TouchEvent) => { + event.preventDefault() + if (event.touches.length !== 1 || isPreventScroll) { + lastTouchPosition.current = { x: -1, y: -1 } + return + } + const { clientX, clientY } = event.touches[0] + + if (!isPreventVerticalScroll) { + rootRef.current?.scrollTo({ + top: rootRef.current?.scrollTop + (lastTouchPosition.current.y - clientY), + behavior: 'instant' + }) + } + + if (!isPreventHorizontalScroll) { + rootRef.current?.scrollTo({ + left: rootRef.current?.scrollLeft + (lastTouchPosition.current.x - clientX), + behavior: 'instant' + }) + } + + lastTouchPosition.current = { x: clientX, y: clientY } + }, + [isPreventScroll, isPreventHorizontalScroll, isPreventVerticalScroll] + ) const handleDefaultClickMiddleMouseButton = useCallback((event: MouseEvent) => { if (event.button === 1) { @@ -60,70 +124,88 @@ const HideScrollbar = forwardRef((prop } }, []) - const handleDefaultKeyDown = (event: KeyboardEvent) => { - if ( - [ - 'ArrowUp', - 'ArrowDown', - 'ArrowLeft', - 'ArrowRight', - ' ', - '', - 'PageUp', - 'PageDown', - 'Home', - 'End' - ].find((value) => value === event.key) - ) { - event.preventDefault() - } - } + const handleDefaultKeyDown = useCallback( + (event: KeyboardEvent) => { + if ( + isPreventScroll && + [ + 'ArrowUp', + 'ArrowDown', + 'ArrowLeft', + 'ArrowRight', + ' ', + '', + 'PageUp', + 'PageDown', + 'Home', + 'End' + ].find((value) => value === event.key) + ) { + event.preventDefault() + } + if ( + isPreventVerticalScroll && + ['ArrowUp', 'ArrowDown', ' ', '', 'PageUp', 'PageDown', 'Home', 'End'].find( + (value) => value === event.key + ) + ) { + event.preventDefault() + } + if ( + isPreventHorizontalScroll && + ['ArrowLeft', 'ArrowRight'].find((value) => value === event.key) + ) { + event.preventDefault() + } + }, + [isPreventScroll, isPreventHorizontalScroll, isPreventVerticalScroll] + ) useImperativeHandle( ref, () => { return { - scrollTo(x, y) { + scrollTo(x, y, smooth?: boolean) { rootRef.current?.scrollTo({ left: x, top: y, - behavior: 'smooth' + behavior: smooth === false ? 'instant' : 'smooth' }) }, - scrollX(x) { + scrollX(x, smooth?: boolean) { rootRef.current?.scrollTo({ left: x, - behavior: 'smooth' + behavior: smooth === false ? 'instant' : 'smooth' }) }, - scrollY(y) { + scrollY(y, smooth?: boolean) { rootRef.current?.scrollTo({ top: y, - behavior: 'smooth' + behavior: smooth === false ? 'instant' : 'smooth' }) }, - scrollLeft(length) { + scrollLeft(length, smooth?: boolean) { rootRef.current?.scrollTo({ left: rootRef.current?.scrollLeft - length, - behavior: 'smooth' + behavior: smooth === false ? 'instant' : 'smooth' }) }, - scrollRight(length) { + scrollRight(length, smooth?: boolean) { rootRef.current?.scrollTo({ left: rootRef.current?.scrollLeft + length, - behavior: 'smooth' + behavior: smooth === false ? 'instant' : 'smooth' }) }, - scrollUp(length) { + scrollUp(length, smooth?: boolean) { rootRef.current?.scrollTo({ top: rootRef.current?.scrollTop - length, - behavior: 'smooth' + behavior: smooth === false ? 'instant' : 'smooth' }) }, - scrollDown(length) { + scrollDown(length, smooth?: boolean) { rootRef.current?.scrollTo({ top: rootRef.current?.scrollTop + length, - behavior: 'smooth' + behavior: smooth === false ? 'instant' : 'smooth' }) }, getX() { @@ -185,8 +267,11 @@ const HideScrollbar = forwardRef((prop }, 1000) window.addEventListener('resize', windowResizeListener()) - if (isPreventScroll) { + if (isPreventScroll || isPreventVerticalScroll || isPreventHorizontalScroll) { rootRef.current?.addEventListener('wheel', handleDefaultWheel, { passive: false }) + rootRef.current?.addEventListener('touchstart', handleDefaultTouchStart, { + passive: false + }) rootRef.current?.addEventListener('touchmove', handleDefaultTouchmove, { passive: false }) @@ -194,6 +279,7 @@ const HideScrollbar = forwardRef((prop rootRef.current?.addEventListener('keydown', handleDefaultKeyDown) } else { rootRef.current?.removeEventListener('wheel', handleDefaultWheel) + rootRef.current?.removeEventListener('touchstart', handleDefaultTouchStart) rootRef.current?.removeEventListener('touchmove', handleDefaultTouchmove) rootRef.current?.removeEventListener('mousedown', handleDefaultClickMiddleMouseButton) rootRef.current?.removeEventListener('keydown', handleDefaultKeyDown) @@ -204,9 +290,13 @@ const HideScrollbar = forwardRef((prop } }, [ handleDefaultClickMiddleMouseButton, + handleDefaultKeyDown, + handleDefaultTouchStart, handleDefaultTouchmove, handleDefaultWheel, - isPreventScroll + isPreventHorizontalScroll, + isPreventScroll, + isPreventVerticalScroll ]) return ( diff --git a/src/pages/MainFramework.tsx b/src/pages/MainFramework.tsx index 1cf80b0..27a8284 100644 --- a/src/pages/MainFramework.tsx +++ b/src/pages/MainFramework.tsx @@ -43,7 +43,7 @@ const MainFramework: React.FC = () => { return ( <> - +
From 9af07179555616961766b7a65c2b0893746abcd3 Mon Sep 17 00:00:00 2001 From: FatttSnake Date: Fri, 22 Sep 2023 16:25:26 +0800 Subject: [PATCH 4/5] Optimize navbar stylesheet --- src/assets/css/pages/header.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/assets/css/pages/header.scss b/src/assets/css/pages/header.scss index 37180a9..03616b6 100644 --- a/src/assets/css/pages/header.scss +++ b/src/assets/css/pages/header.scss @@ -7,7 +7,7 @@ z-index: 1; width: 100%; height: 70px; - min-width: 900px; + min-width: 500px; background-color: white; border: { bottom: { From bba86ade6d6890d6fda5f8ddd3efcdabe94dd04a Mon Sep 17 00:00:00 2001 From: FatttSnake Date: Fri, 22 Sep 2023 16:30:45 +0800 Subject: [PATCH 5/5] Fix scroll index out-of-bounds bug --- src/components/home/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/components/home/index.tsx b/src/components/home/index.tsx index 3f938db..04edc5d 100644 --- a/src/components/home/index.tsx +++ b/src/components/home/index.tsx @@ -61,7 +61,7 @@ const Home: React.FC = () => { } const handleScrollDown = () => { - if (currentContent >= content.length) { + if (currentContent >= content.length - 1) { return } handleScrollToContent(currentContent + 1)() @@ -72,7 +72,7 @@ const Home: React.FC = () => { } const handleWheel = (event: React.WheelEvent) => { - if (event.altKey || event.ctrlKey) { + if (event.altKey || event.ctrlKey || event.shiftKey) { return }