1

As you can see it I am not able to scroll down the page when I click on the button, This all code running in one file in App.js
Even I tried with useRef() and UseState() also but not working
I need help in JavaScript logic only
Javascript:

const myFunction = () => {
        const element = document.getElementById("myDIV");
        element.scrollLeft = 50;
        element.scrollTop = 10;
    };

HTML:

<div
    id="myDiv"
    style={{ height: "250px", width: "250px", overflow: "auto" }}
>
        <div
                id="content"
                style={{
                height: "800px",
                width: "2000px",
                backgroundColor: "coral",
            }}
        >
        <button onClick={myFunction}>Scroll</button>
        <p>Some text inside a div element.</p>
        <p>Some text inside a div element.</p>
        <p>Some text inside a div element.</p>
        <p>Some text inside a div element.</p>
    </div>
</div>

2 Answers 2

1

Here:

const element = document.getElementById("myDIV");

the ID is wrong. It should be myDiv because you set the div's ID to myDiv:

<div
    id="myDiv"
    style={{ height: "250px", width: "250px", overflow: "auto" }}
>

and also you can use the scroll function of Element instead of setting scrollLeft and scrollTop:

const myFunction = () => {
  const element = document.getElementById("myDiv");
  element.scroll(50, 10);
}

But I recommend using refs (I know you mentioned it but I'm not sure if you used it correctly).

Create a ref:

const divRef = useRef();

Assign the ref to the div:

<div
    id="myDiv"
    ref={divRef}
    style={{ height: "250px", width: "250px", overflow: "auto" }}
>

Then scroll it (you don't need the element variable anymore):

const myFunction = () => {
  divRef.current.scroll(50, 10);
};
Sign up to request clarification or add additional context in comments.

8 Comments

Thanks for the Solution, but here useRef() getting undefine, will you please help me in that
@Amit Is there an error?
I am not getting any error there I am getting undefined value when I look in console log, in comment below I update all my code
@Amit Ok. I saw your code in codesandbox. You passed divRef to the wrong div. Instead pass it to the div that has the myDiv ID.
codesandbox.io/s/exciting-rgb-hn798p?file=/src/App.js:287-293 ---- ok now I got it working now, and do you know if I remove height and weight size from ref={myDiv} then it is not working, in that case how we handle scroll?? except window.scroll , scrollTo, scrollTop
|
1

I think this is what you wanted. Since the "scroll" button dissapears after the scroll you can

import React, { useEffect, useState } from "react";
import "./App.css";

function App() {
const [scrollPos, setScrollPos] = useState(0);

useEffect(() => {
  setScrollPos(scrollPos + 100);
}, []);

function myFunction() {
// Get the scrollable element which is the parent div.
  let element = document.getElementById("myDiv");
  // Set this to whatever you need. Right now it will start at      100, then go to 200, 300...
  setScrollPos(scrollPos + 100);

  // Calls the scroll function.
  element.scroll({
    // Top is for the y position.
    top: scrollPos,
    //Use left for x position.
    //left: 100
    // It looks nicer if the scroll is smooth
    behavior: "smooth"
  });
}

return (
<>
  <div
    id="myDiv"
    style={{ height: "250px", width: "250px", overflow: "auto" }}
  >
    <div
      id="content"
      style={{
        height: "800px",
        width: "2000px",
        backgroundColor: "coral"
      }}
    >
      <button
        onClick={myFunction}
        //Add this is you want the button to stay in the corner.
        //style={{ position: "absolute" }}
      >
        Scroll
      </button>
      <br />
      <input onClick={myFunction} type="radio" name="s" id="s" />
      <label onClick={myFunction} htmlFor="">
        Salary Person
      </label>
      <br />
      <input onClick={myFunction} type="radio" name="s" id="s" />
      <label onClick={myFunction} htmlFor="">
        Salary Person
      </label>
      <br />
      <input onClick={myFunction} type="radio" name="s" id="s" />
      <label onClick={myFunction} htmlFor="">
        Salary Person
      </label>
      <p>Some text inside a div element.</p>
      <p>Some text inside a div element.</p>
      <p>Some text inside a div element.</p>
      <p>Some text inside a div element.</p>
    </div>
  </div>
</>

); }

export default App;

2 Comments

with the help of element its working fine but I need solution in useRef() or UseState() now how will scroll screen with useRef or useState
@Amit Is this closer to what you were wanting?

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.