한번씩 읽고 가세요.
“ 테스트 될 수 없다면, 요구하지도 말라 ”
- Ken Pugh
프리팩토링 저자
728x90
오늘은 스크롤 애니메이션을 공부해보았습니다.
<!DOCTYPE html>
<html lang="ko">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>패럴랙스 효과</title>
<link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Great+Vibes&family=Nabla&family=Rubik+Dirt&family=Stardos+Stencil&display=swap" rel="stylesheet">
<link href="https://webfontworld.github.io/recia/ReciaSerifDisplay.css" rel="stylesheet">
<link href="https://webfontworld.github.io/Rebecca/Rebecca.css" rel="stylesheet">
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: 'Nabla', cursive;
}
body {
height: 12000px;
}
.scrollTop {
position: fixed;
left: 10px;
top: 10px;
z-index: 1000;
width: 40px;
height: 40px;
color: #fff;
text-align: center;
font-size: 14px;
line-height: 40px;
background-color: rgba(0,0,0,0.6);
}
.fixed {
position: fixed;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
z-index: 1;
}
.s1-text1 {
font-size: 30vw;
line-height: 1;
padding-top: 8vw;
color: #ffdcdc;
font-family: "Rebecca";
}
.s1-text2 {
font-size: 0vw;
line-height: 1;
padding-top: 8vw;
color: #1b7238;
}
.s1-text3 {
font-size: 0vw;
line-height: 1.5;
text-align: center;
font-family: "Rebecca";
color: #fff;
}
.s1-text4 {
font-size: 0vw;
line-height: 1.5;
text-align: center;
font-family: 'Nabla', cursive;
}
.s1-img1 {
width: 200vw;
height: 100vh;
}
.s1-img1 > div {
height: 20vh;
display: flex;
justify-content: space-between;
align-items: center;
}
.s1-img1 > div > div {
width: 19vh;
height: 19vh;
background-position: center;
background-size: cover;
background-repeat: no-repeat;
border: 5px solid #000000;
}
.s1-img1-1 > div:first-child { background-image: url(https://dkdlelw.github.io/web2023/assets/ico/icon.jpg);}
.s1-img1-1 > div:last-child { background-image: url(https://leeyouna21.github.io/web2023/assets/ico/icon01.jpg);}
.s1-img1-2 > div:first-child { background-image: url(https://seolhee313.github.io/web2023/assets/ico/icon.jpg);}
.s1-img1-2 > div:last-child { background-image: url(https://kebab000.github.io/web2023/assets/ico/icon01.jpg);}
.s1-img1-3 > div:first-child { background-image: url(https://dkseho9121.github.io/web2023/assets/ico/icon01.jpg);}
.s1-img1-3 > div:last-child { background-image: url(https://jinyongjang.github.io/web2023/assets/ico/icon01.jpg);}
.s1-img1-4 > div:first-child { background-image: url(https://chohena.github.io/web2023/assets/ico/icon01.jpg);}
.s1-img1-4 > div:last-child { background-image: url(https://kimdohyun2002.github.io/web2023/assets/ico/icon.jpg);}
.s1-img1-5 > div:first-child { background-image: url(https://xlsak5.github.io/testAnGyonam/assets/ico/icon.jpg);}
.s1-img1-5 > div:last-child { background-image: url(https://hyunmijin.github.io/web2023/assets/ico/icon.jpg);}
</style>
</head>
<body class="body"
data-0="background-color: #FA8BFF;
background-image: linear-gradient(45deg, #FA8BFF 0%, #2BD2FF 52%, #2BFF88 90%);
"
>
<div class="scrollTop"></div>
<section id="section1">
<div class="s1-text1 fixed"
data-0="font-size: 0vw; opacity:1"
data-1800="font-size: 25vw; opacity: 1"
data-2000="font-size: 100vw; opacity: 1"
data-2100="font-size: 25vw; opacity: 1"
data-3000="font-size: 0vw; opacity: 0"
>WEB</div>
<div class="s1-text2 fixed"
data-2500="font-size: 0vw; transform: translate(-50%,-50%) rotate(0deg) "
data-3000="font-size: 30vw; transform: translate(-50%,-50%) rotate(720deg)"
data-3100="font-size: 32vw;"
data-3200="font-size: 30vw;"
data-3300="font-size: 32vw;"
data-3400="font-size: 30vw;"
data-3500="font-size: 32vw;"
data-3600="font-size: 30vw;"
data-7000="font-size: 30vw; opacity: 1"
data-7100="font-size: 100vw; opacity: 0"
>Hello</div>
<div class="s1-img1 fixed"
data-3000="width: 150vw;"
data-5000="width: -10vw; "
data-6000="opacity: 1; width: 70vw"
data-6500="opacity: 0.5; width: 90vw"
data-7000="opacity: 0.5; width: 95vw"
data-8005="opacity: 0"
data-9005="opacity: 1"
data-10500="opacity: 1"
data-11000="opacity: 0"
>
<div class="s1-img1-1"
data-3500="transform: rotate(180deg); "
data-4500="transform: rotate(360deg);"
>
<div></div>
<div></div>
</div>
<div class="s1-img1-2"
data-3500="transform: rotate(180deg); "
data-4500="transform: rotate(360deg);"
>
<div></div>
<div></div>
</div>
<div class="s1-img1-3"
data-4000="transform: rotate(180deg);"
data-5000="transform: rotate(360deg);"
>
<div></div>
<div></div>
</div>
<div class="s1-img1-4"
data-4500="transform: rotate(180deg); "
data-5500="transform: rotate(360deg);"
>
<div></div>
<div></div>
</div>
<div class="s1-img1-5"
data-4999="transform: rotate(0deg); "
data-5002="transform: rotate(180deg); opacity:1 "
data-6000="transform: rotate(360deg)"
>
<div></div>
<div></div>
</div>
</div>
<div class="s1-text2 fixed"
data-7100="opacity: 1;font-size: 0vw; transform: translate(-50%,-50%) rotate(0deg); "
data-7200="font-size: 20vw; transform: translate(-50%,-50%) rotate(720deg)"
data-7300="font-size: 22vw;"
data-7400="font-size: 20vw;"
data-7500="font-size: 22vw;"
data-7600="font-size: 20vw;"
data-7700="font-size: 22vw;"
data-7800="font-size: 20vw;"
data-7900="font-size: 20vw; opacity: 1"
data-8000="font-size: 100vw; opacity: 0"
>Fighting</div>
<div class="s1-text3 fixed"
data-7900="font-size: 4vw; transform: translate(-50%,-50%); opacity:0"
data-9000="font-size: 4vw; transform: translate(-50%,-50%); opacity:1"
data-9500="font-size: 4vw; transform: translate(-50%,-50%); opacity:0"
>"실패는 재도전의 시작이다." - 헨리 포드</div>
<div class="s1-text3 fixed"
data-9000="font-size: 4vw; transform: translate(-50%,-50%); opacity:0"
data-10000="font-size: 4vw; transform: translate(-50%,-50%); opacity:1"
data-11000="font-size: 4vw; transform: translate(-50%,-50%); opacity:0"
>"가장 어려운 일이 가장 중요한 일이다." - 알버트 아인슈타인" - 헨리 포드</div>
<div class="s1-text3 fixed"
data-10700="font-size: 1vw; transform: translate(-50%,-50%); opacity:0 "
data-11000="font-size: 5vw; transform: translate(-50%,-50%); opacity:1"
data-11500="font-size: 11vw; transform: translate(-50%,-50%); opacity:1"
>가봅시다.</div>
</section>
<script src="https://cdnjs.cloudflare.com/ajax/libs/skrollr/0.6.30/skrollr.min.js"></script>
<script type="text/javascript">
let s = skrollr.init();
</script>
<script>
window.addEventListener("scroll", () => {
let scrollTop = window.pageYOffset || window.scrollY;
document.querySelector(".scrollTop").innerText = parseInt(scrollTop);
});
</script>
</body>
</html>
노가다..
<script src="https://cdnjs.cloudflare.com/ajax/libs/skrollr/0.6.30/skrollr.min.js"></script>
<script type="text/javascript">
let s = skrollr.init();
</script>
<script>
window.addEventListener("scroll", () => {
let scrollTop = window.pageYOffset || window.scrollY;
document.querySelector(".scrollTop").innerText = parseInt(scrollTop);
});
</script>
스크립트로 스크롤 값을 제일 먼저 가져와 .scrollTop 위치에 출력 시켜줍니다.
그 후 스크롤 애니메이션을 가능하게 해줄 라이브러리를 가져와줍니다.
<div class="s1-text2 fixed"
data-2500="font-size: 0vw; transform: translate(-50%,-50%) rotate(0deg) "
data-3000="font-size: 30vw; transform: translate(-50%,-50%) rotate(720deg)"
그 후 선택자 옆에 data-(스크롤 위치값) 위치값을 입력하면 그 스크롤이 그 위치값으로 갔을 경우 주고 싶은 효과를 " " 안에 css방식으로 효과를 넣어주면 됩니다.