scroll과 ref

김태현·2021년 1월 10일
0

자바스크립트

목록 보기
2/5
post-thumbnail

scrollTop: 세로 스크롤바 위치
scrollHeight: 스크롤이 있는 박스 안 div 높이
clientHeight: 스크롤이 있는 박스 높이

원하는 태그로 가서 속성에다가 ref={(ref) => this.scroll = ref} 이렇게 설정해주면 해당 돔에 대해서 ref를 사용할 수 있다

여기서 this.scroll 이 부분은 원하는 동작에 따라서 임의로 이름을 설정한다
this.chorong 이렇게 해도 상관없다는 말!!

태그 뿐만이 아니라 컴포넌트에도 같은 방식으로 ref를 사용할 수 있다

다음은 ref를 이용한 스크롤 예제이다

ScrollBox.js

import React, { Component } from 'react';

class ScrollBox extends Component {
  scrollToTop = () => {
    const { scrollHeight, clientHeight } = this.box;
    this.box.scrollTop = clientHeight - scrollHeight;
  };

  scrollToBottom = () => {
    const { scrollHeight, clientHeight } = this.box;

    this.box.scrollTop = scrollHeight - clientHeight;
  };

  render() {
    const style = {
      border: '1px solid black',
      height: '300px',
      width: '300px',
      overflow: 'auto',
      position: 'relative',
    };

    const innerStyle = {
      width: '100%',
      height: '650px',
      background: 'linear-gradient(white, black)',
    };

    return (
      <div
        style={style}
        ref={ref => {
          this.box = ref;
        }}
      >
        <div style={innerStyle}></div>
      </div>
    );
  }
}

export default ScrollBox;

App.js

import React, { Component } from 'react';
import ScrollBox from './ScrollBox';

class App extends Component {
  render() {
    return (
      <div>
        <ScrollBox ref={ref => (this.scrollBox = ref)} />
        <button onClick={() => this.scrollBox.scrollToTop()}>맨 위로</button>
        <button onClick={() => this.scrollBox.scrollToBottom()}>
          맨 밑으로
        </button>
      </div>
    );
  }
}

export default App;

profile
프론트엔드 개발자

0개의 댓글