【发布时间】:2020-11-12 07:01:51
【问题描述】:
我正在创建一个按钮,该按钮在用户向下滚动时可见,而在用户到达顶部时将不可见。
我正在使用 React 挂钩来跟踪滚动,但无法访问用户滚动到哪一部分。我正在使用每个高度为 100vh 的 Html 部分(3 个部分),顶部有一个固定标题,有一个 login/register 按钮,当用户向下滚动时,即一旦用户到达第二个,就会显示该按钮部分并将一直可见,直到用户到达第一个部分,即根部分。我用 scroll-snap-type: y mandatory;是主容器的CSS
React 代码放在这里:
import React, { useRef, useEffect, useState } from 'react'
import { useHistory } from "react-router-dom";
import Header from './Header'
import Sec1 from './Sec1'
import Sec2 from './Sec2'
import Sec3 from './Sec3'
import './Home.css'
function Home() {
let history = useHistory();
const loginregister = () => {
//on click login move to login register page
}
var mainConatiner = useRef(null)
useEffect(() => {
mainConatiner.current.addEventListener('scroll', () => {
console.log("srolling");
})
})
return (
<div className="main-container" ref={mainConatiner}>
<Header loginregister={loginregister} />
<div className="middle">
{/* Root */}
<Sec1 loginregister={loginregister} />
{/* Bank */}
<Sec2 />
{/* Section 3*/}
<Sec3 />
</div>
</div>
)
}
export default Home
CSS 代码放在这里
.main-container {
background: #FFFCF5;
height: 100vh;
width: 100vw;
display: grid;
grid-template-rows: 0fr 1fr;
overflow-y: scroll;
scroll-padding-top: 10vh;
scroll-snap-type: y mandatory;
scroll-behavior: smooth;
}
::-webkit-scrollbar {
width: 0px;
}
.header {
display: grid;
grid-template-columns: 1fr 2fr 0.4fr;
width: 100%;
position: fixed;
top: 0;
left: 0;
z-index: 100;
}
section {
height: 100vh;
scroll-snap-align: center;
padding-top: 15vh;
display: grid;
justify-content: center;
}
我想在单次滚动时获取用户正在查看的部分,该部分会发生变化。 useEffect() 钩子被多次调用
【问题讨论】:
-
@ohlupo 谢谢你的包名。我通过更改阈值来完成这项工作。
标签: javascript html css reactjs