반응형
250x250
Notice
Recent Posts
Recent Comments
Link
관리 메뉴

ZeroToHunnit Coding

[Javascript] 스크롤에 따라 채워지는 bar 본문

JAVASCRIPT

[Javascript] 스크롤에 따라 채워지는 bar

0에서100 2024. 2. 14. 20:58
728x90
반응형

보통 홈페이지에 연혁을 보여주는 페이지를 가면 보이는 progressbar를 만들어보았다.

 

HTML

  <div class="section">
    <div class="title-box">
      <h1>안녕하세요<br>요건 고정된 타이틀임다.</h1>
    </div>
    <div class="progress-box">
      <div class="progress-bar"></div>
    </div>
    <div class="content-box">
      <p>채워집니다~ 이것 좀 보세요오 신기하죠? 곧 끝나갑니다!
      </p>
    </div>
  </div>

 

CSS

.section {
  width: 100%;
  position: relative;
  display: flex;
  justify-content: center;
  margin: 300px 0;
}

.title-box {
  position: sticky;
  top: 100px;
  left: 200px;
  width: 500px;
  height: 100%;
}

.progress-box {
  width: 5px;
  height: 3000px;
  position: relative;
  background-color: #999;
}

.progress-bar {
  width: 100%;
  height: 0%;
  background-color: chocolate;
}

.content-box {
  position: relative;
  width: 600px;
  margin-left: 50px;
}

.content-box p {
  font-size: 30px;
  writing-mode: vertical-lr;
  letter-spacing: 50px;
}

title부분은 position:sticky를 이용해 고정시켜주고, content 부분에 writing-mode: vertical-lr(글자를 세로로 보여줌), letter-spacing(자간 조정)을 통해 세로로 좀 띄워서 보여주었다.

 

JAVASCRIPT

let total = document.querySelector('.progress-box').clientHeight - 353;

window.addEventListener('scroll',()=>{
  let progress = window.scrollY / total * 100

  document.querySelector('.progress-bar').style.height = `${progress}%`
});

우선 변수부분에 progress-box의 height값을 분모로 쓰기위해 담아두었는데 353을 뺀 이유는 window.scrollY를 검사해보았을 때 전체 값보다 353만큼 작게 나오길래 뺐는데 왜 353이 차이가 나는지 이유를 알지 못했다. 반응형으로 작업한다면 height값이 달라질 때마다 저 뒤에 숫자만 고치면 되겠지만.. 원하는 바는 아니다.

progress는 window.scrollY값에 따라 0~100%로 되게 계산하고 progress-bar의 height값을 %로 구해주었다.

확장성있는 코드는 참.. 어려운거같다.

728x90
반응형