반응형
완성본(체험용)
예시 코드에 보면 로딩바가 적힌 부분이 있는데, 진행바 이다(오타).
- UFO 이미지는 픽시베이에서 링크 해온거라 어느 순간 안 될 수도 있음.
See the Pen Untitled by youngwan2 (@youngwan2) on CodePen.
HTML 코드
<article class="progress">
<div class="bar"></div>
<p class="alert"></p>
</article>
<h1>스크롤</h1>
CSS 코드
* {
margin: 0;
box-sizing: border-box;
}
body {
width: 100%;
height: 10000px;
background: linear-gradient(160deg, black, black);
}
h1 {
width: 100%;
top: 3rem;
color: rgb(219, 204, 74);
position: fixed;
text-align: center;
}
/* 프로그래스 테두리 */
.progress {
position: fixed;
top: 0;
width: 100vw;
height: 30px;
background-color: black;
}
/* 우주선 */
.progress .bar {
position: absolute;
width: 100px;
height: 50px;
background-image: url("https://pixabay.com/get/g49986debfbd170c0c4b29a9e6b4ee68715b61e8c76dfac2cdf1018c8eb79a2f1e6dd7cf55cbd3e3a2bdfe9b6a1520f27_640.png");
background-size: cover;
box-shadow: 0 200px 50px 40px rgb(203, 203, 163),
0 210px 50px 30px rgb(237, 252, 28);
border-radius: 50%;
transition: 0.3s;
}
/* 경고 문구 나타냄 */
.alert {
transition: 0.5s;
position: absolute;
left: 50%;
top: 10rem;
translate: -50% -50%;
color: red;
font-size: 2rem;
text-shadow: 15px 10px 20px, 0 15px 15px tomato;
font-family:cursive;
text-align: center;
}
JS 코드
(참고) 스크롤바의 전체 비율을 구하는 방법
더보기
세로 스크롤바 Y 축이 이동한 위치 값
(window.scrollY)
/
웹 브라우저의 총 높이
(document.documentElement.scrollHeight)
-
현재 유저에게 보이는 브라우저 화면의 높이
(window.innerHeight 혹은 window.outerHeight)
해주면 된다.
요약하면
window.scrollY / (document.documentElement.scrollHeight - window.innerHeight) *100
= 실제 브라우저에서 현재 까지 스크롤되고 있는 height(높이)의 백분율 이 된다.
위 공식을 이용해서 간단하게 프로그래스바를 만들 수 있고,
활용하기에 따라서 퍼센트별로 다양한 애니메이션을 적용할 수도 있다.
(function () {
const $h1 = document.querySelector("h1");
const bar = document.querySelector(".bar");
const alert = document.querySelector(".alert");
// 프로그래스바를 조작하는 함수
function scrollFunc() {
const scrollXPer = Math.floor(
(window.scrollY /
(document.documentElement.scrollHeight - window.innerHeight)) *
100
);
//vw는 웹브라우저의 가로축 전체를 기준으로 0~100의 비율을 가지므로 % 대신 활용 가능
$h1.innerHTML = scrollXPer;
bar.style.transform = `translate3d(${scrollXPer}vw, 0px, 0px)`;
alertFunc(scrollXPer);
}
// 꼽사리 로딩바 퍼센트별로 적용되는 함수
function alertFunc(scrollXPer) {
if (scrollXPer === 0) return (alert.innerHTML = '"우주선 로딩바 만들기"');
if (scrollXPer === 60)
return (alert.innerHTML = '"조심해! 잘못 건드리면 우린 끝장이야!!.."');
if (scrollXPer > 20 && scrollXPer < 50)
return (alert.innerHTML = '"어어!! 저거 뭐야!!? 온다아아!!"');
if (scrollXPer > 80)
return (alert.innerHTML = '"갔나.. 정말 무시무시하군.."');
}
// 스크롤 이벤트를 등록해주는 리스너
window.addEventListener("scroll", scrollFunc);
})();
완성본 이미지
반응형
'자바스크립트' 카테고리의 다른 글
[js] 자바스크립트 아코디언(toggle 메서드를 이용한 단순 아코디언) (0) | 2023.02.27 |
---|---|
[js] 카테고리 클릭 시 자동으로 따라오는 밑줄 애니메이션 만들기 (0) | 2023.02.25 |
[js] 자바스크립트에서 가속도 더하는 공식 및 디바이스 기울기 이벤트/USERAgent/ (0) | 2023.02.23 |
[js] 대상 객체에 마우스 호버 시 적용되는 애니메이션 만들어보기 (0) | 2023.02.23 |
[js] 브라우저 화면의 중간값을 구하기(중심축을 이용한 애니메이션) (0) | 2023.02.22 |