Merge pull request 'Add touch scroll to Home' (#15) from FatttSnake into dev
Reviewed-on: FatttSnake/fatweb-ui#15
This commit was merged in pull request #15.
This commit is contained in:
@@ -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} />
|
||||||
})}
|
})}
|
||||||
|
|||||||
Reference in New Issue
Block a user