v1.0-230926 #27

Merged
FatttSnake merged 81 commits from dev into master 2023-09-26 11:06:08 +08:00
Showing only changes of commit b7ee6b0a6f - Show all commits

View File

@@ -13,7 +13,8 @@ const Home: React.FC = () => {
} = useContext(MainFrameworkContext) } = useContext(MainFrameworkContext)
const fitFullScreenRef = useRef<HTMLDivElement>(null) const fitFullScreenRef = useRef<HTMLDivElement>(null)
const scrollTimeout = useRef<number>() const scrollTimeout = useRef(0)
const touchStart = useRef(0)
const [slogan, setSlogan] = useState('') const [slogan, setSlogan] = useState('')
const [sloganType, setSloganType] = useState(true) const [sloganType, setSloganType] = useState(true)
@@ -59,6 +60,22 @@ const Home: React.FC = () => {
} }
} }
const handleScrollUp = () => {
handleScrollToContent(currentContent - 1)()
clearTimeout(scrollTimeout.current)
scrollTimeout.current = setTimeout(() => {
setCurrentContent(currentContent - 1)
}, 500)
}
const handleScrollDown = () => {
handleScrollToContent(currentContent + 1)()
clearTimeout(scrollTimeout.current)
scrollTimeout.current = setTimeout(() => {
setCurrentContent(currentContent + 1)
}, 500)
}
const handleWheel = (event: React.WheelEvent) => { const handleWheel = (event: React.WheelEvent) => {
if (event.altKey || event.ctrlKey) { if (event.altKey || event.ctrlKey) {
return return
@@ -68,22 +85,29 @@ const Home: React.FC = () => {
if (currentContent >= content.length) { if (currentContent >= content.length) {
return return
} }
handleScrollToContent(currentContent + 1)() handleScrollDown()
clearTimeout(scrollTimeout.current ?? 0)
scrollTimeout.current = setTimeout(() => {
setCurrentContent(currentContent + 1)
console.log(`up ${currentContent + 1}`)
}, 500)
} else { } else {
if (currentContent <= 0) { if (currentContent <= 0) {
return return
} }
handleScrollToContent(currentContent - 1)() handleScrollUp()
clearTimeout(scrollTimeout.current ?? 0) }
scrollTimeout.current = setTimeout(() => { }
setCurrentContent(currentContent - 1)
console.log(`down ${currentContent - 1}`) const handleTouchStart = (event: React.TouchEvent) => {
}, 500) touchStart.current = event.touches[0].clientY
}
const handleTouchEnd = (event: React.TouchEvent) => {
const moveLength = touchStart.current - event.changedTouches[0].clientY
if (Math.abs(moveLength) < 100) {
return
}
if (moveLength > 0) {
handleScrollDown()
} else {
handleScrollUp()
} }
} }
@@ -114,7 +138,7 @@ const Home: React.FC = () => {
return ( return (
<> <>
<div onWheel={handleWheel}> <div onWheel={handleWheel} onTouchStart={handleTouchStart} onTouchEnd={handleTouchEnd}>
{content.map((element, index) => { {content.map((element, index) => {
return <FitFullScreen key={index} {...element} /> return <FitFullScreen key={index} {...element} />
})} })}