본문 바로가기

안녕하세요!

프로그래밍 언어/Javascript

[ Javascript ] window.onscroll로 페이지 상단 스크롤 바 만들기

 

window.onscroll로 페이지 상단 스크롤 바 만들기 


 


 

Javascript


 

<script>
    window.onscroll = function() {createPrograssBar()}; 

    function createPrograssBar() {
        var winScroll = document.body.scrollTop || document.documentElement.scrollTop;
        var height = document.documentElement.scrollHeight - document.documentElement.clientHeight;
        var scrolled = (winScroll / height) * 100;
        document.getElementById("indicator").style.width = scrolled + "%";
    }
</script>

 


window


 

window

 

window 객체는

브라우저 내에 있는모든 요소들이 담겨있는 객체이며,

전역적으로 사용이 가능하기에 '전역 객체'로 불리운다.

window browser, 즉 브라우저 창을 제어하는 여러 가지의 메서드를 제공한다.

전역객체로서 존재하기 때문에 사실상 생략하여도 무관하다.

 

onscroll


 

onscroll

 

onscroll 함수를 사용하면 

사용자가 페이지를 스크롤할 때 발생하는 이벤트를 감지할 수 있다.

 

window.onscroll


 

window.onscroll = function() { createProgressBar() };

 

createProgressBar() 함수가

이 이벤트가 발생할 때마다 호출된다.

 

function createProgressBar() {
    // 현재 스크롤 위치
    var winScroll = document.body.scrollTop || document.documentElement.scrollTop;
    // 문서 전체 높이
    var height = document.documentElement.scrollHeight - document.documentElement.clientHeight;
    // 스크롤된 비율 계산
    var scrolled = (winScroll / height) * 100;
    // 진행률 표시 막대의 너비 설정
    document.getElementById("indicator").style.width = scrolled + "%";
}

 

document.body.scrollTop, document.documentElement.scrollTop

 

var winScroll = document.body.scrollTop || document.documentElement.scrollTop;

 

document.body.scrollTop이나 document.documentElement.scrollTop

현재 스크롤 위치를 y축 방향으로 스크롤한 거리를 나타낸다.

참고로 document.documentElement.scrollLeft

x축 방향으로 스크롤한 거리를 나타낸다.

 

documentElement는 IE, Firefox에서 사용하며,

body는 .Chrome, Safari, Opera, Edge 등에서 사용한다.

그리고 pageXOffset은 Firefox, cfrome, Safari, Opera, Edge, IE>=9에서 사용한다.

반응형

document.documentElement.scrollHeight, documentElement.clientHeigth


 

var height = document.documentElement.scrollHeight - document.documentElement.clientHeight;

 

document.documentElement.scrollHeight

문서 전체 높이를 나타낸다.

document.documentElement.clientHeigth

현재 브라우저창의 높이를 나타낸다.

 

즉 브라우저 창의 전체 높이에서

현재 브라우저 창의 높이를 뺀 값을 사용하는것이다. 

 

var scrolled = (winScroll / height) * 100;

 

winscroll에는 y축으로 이동한 현재 스크롤 위치의 값이 계산되어 있고,

height에는 전체 브라우저창 높이에서 어느 정도의 높이에 해당하는지가 계산돼 있다.

이 두 값을 나누면 페이지에서 얼마나 스크롤 되었는지에 관한 진행률을 스크롤바에 나타낼 수 있다.

 

만약 winscroll이 500dlrh, height가 1000이라면,

(winScroll / height) = 0.5가 된다.

스크롤 위치가 전체 문서의 중간에 해당한다는 의미이다.

이를 *100을 통해이 비율을 백분율로 변환하면,

scrolled에 50이 저장된다. 

 


 

getElementById()


 

document.getElementById("indicator").style.width = scrolled + "%";

 

getElementById() 함수에는

indicator이라는 인자값을 ID로 설정하여

HTML <body> 내에 있는 class id와 상호작용 한다.

 

style.width를 사용해 스타일 요소 중에서 width를 설정하겠다는 의미이다.

%의 경우에는

계산된 scrolled 값을 퍼센트로 변환해 진행률을 나타내는 스크롤 바의 너비로 설정하게 된다. 

 

HTML


 

<div class = "progress-container">
    <div class = "progress-bar" id = "indicator"></div>
</div>

 

class 명을 progress-bar로 지정하여 CSS에서 불러올 수 있도록 한다.

idindicator로 설정해 javascript를 불러올 수 있도록 한다.  

 

CSS


 

.progress-bar {
      height: 8px;  /* 높이 */
      background: #FFE08C; /* 색상 */
      width: 0%;
}

 

class 명인 progress-bar에 관한 스타일을 지정한다.

width는 처음 0%인 상태로 시작하도록 설정한다.

 


728x90

 

728x90
반응형

loading