Reputation: 71
I'm trying to implement a click to scroll function in my react app. I tried using react-scroll
library, window.scrollIntoView
, and using window.scrollTo
with a ref. These didn't work with my app having an overflow, so I'm forced to remove it to get it to work.
.App {
height: 100vh;
overflow-y: scroll; // removing this makes click to scroll work
}
how I used window.scrollTo
:
const scrollSection = useRef(null);
const goToSection = () => {
window.scrollTO({
top: scrollSection.current.offsetTop,
behavior: "smooth"
});
and react-scroll:
<Link to="firstSection" spy={true} smooth={true}>
<li></li>
</Link>
Is there a way to get this working with overflow, since I'd like to keep the overflow styling if possible.
Upvotes: 1
Views: 2855
Reputation: 25372
Call it on the overflowing element itself, rather than on the window. HTMLElements have a similar function just called scroll()
.
document.querySelector("button").addEventListener("click", function(){
let target = document.getElementById("scroll");
document.querySelector("div").scroll({
top: target.offsetTop,
behavior: 'smooth'
});
});
html, body {margin: 0}
div > p
{
height: 100px;
}
div
{
height: 100vh;
overflow: auto;
}
#scroll
{
height: 240px;
background: red;
}
<div>
<button>Scroll</button>
<p>Hello</p>
<p>Hello</p>
<p>Hello</p>
<p>Hello</p>
<p>Hello</p>
<p>Hello</p>
<p>Hello</p>
<p>Hello</p>
<p>Hello</p>
<p>Hello</p>
<p>Hello</p>
<p id="scroll">Scroll to me!</p>
</div>
Upvotes: 3