반응형
250x250
Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | |
7 | 8 | 9 | 10 | 11 | 12 | 13 |
14 | 15 | 16 | 17 | 18 | 19 | 20 |
21 | 22 | 23 | 24 | 25 | 26 | 27 |
28 | 29 | 30 | 31 |
Tags
- 스크롤
- NAV
- scrollY
- 이벤트리스너
- getBoundingClientRect
- forEach
- width
- localstorage
- html
- React
- pointermove
- mousemove
- insertAdjacentHTML
- For
- scrollevent
- input
- swiper
- addEventListener
- swiperjs
- Sticky
- 확장성
- scroll
- 반복문
- css
- classList
- Animation
- NodeList
- Hover
- 애니메이션
- JavaScript
Archives
- Today
- Total
ZeroToHunnit Coding
[Javascript] 스크롤에 따라 서서히 div 크기 달라지게 하기 본문
728x90
반응형
Scroll Event(스크롤 이벤트)를 이용한 div 크기 변경
* position: sticky
* 일차함수
* Scroll Event
Preview
Scroll의 위치가 600 ~ 1400 까지는 width: 50vw ~ 100vw로, height: 50vh ~ 100vh 로 서서히 커지게 하고, 4000 ~ 4600에서는 width: 100vw ~ 0로, height: 100vh ~ 0으로 서서히 없어지게 한다.
HTML
<div class="bg">
<div class="bx">
<p>나 커질거임</p>
</div>
</div>
HTML은 이렇게 간단하게 설정해줍니다.
CSS
.bg{
width: 100%;
height: 5000px;
margin-top: 600px;
margin-bottom: 600px;
}
.bx{
width: 50vw;
height: 50vh;
background: #bbb;
border-radius: 16px;
position: sticky;
top: 0px;
margin: auto;
}
bg라는 클래스를 가진 div는 스크롤하는 것이 보이도록 height를 크게 잡는다.
bx라는 클래스를 가진 div는 초기 width, height값을 정해주고 position: sticky를 이용해서 고정시켜준다.
JS
window.addEventListener('scroll', function () {
let currentScroll = document.querySelector('html').scrollTop; //현재스크롤값
let bigger = (1 / 18) * currentScroll - (500 / 18); //초기에 bx크기가 커지는 함수
let smaller = -(1 / 6) * currentScroll + (4000 / 6 + 100); //후반에 bx크기가 작아지는 함수
if (smaller < 100) {
document.querySelector('.bx').style.width = `${smaller}vw`
document.querySelector('.bx').style.height = `${smaller}vh`
document.querySelector('.bx').style.borderRadius = `16px`
} else if (bigger > 100) {
document.querySelector('.bx').style.width = `100vw`
document.querySelector('.bx').style.height = `100vh`
document.querySelector('.bx').style.borderRadius = `0`
} else if (bigger >= 50) {
document.querySelector('.bx').style.width = `${bigger}vw`
document.querySelector('.bx').style.height = `${bigger}vh`
document.querySelector('.bx').style.borderRadius = `16px`
}
});
window의 scroll을 감지하는 이벤트리스너를 사용한다.
bigger와 smaller 변수에 담겨진 일차 함수는 특정 스크롤에서 특정 값으로 구했기 때문에 if문 안에 조건문에서 100과 50의 숫자가 나오는 것이다. (0% ~ 100%의 의미와 같다)
- 주의사항
처음에 bigger >= 50 조건부터 작성해서 반대로 적었는데 다른 조건이 부합할 때 적용되지 않아서 조금 헤맸다.
if문을 작성할 때 조건문이 true이면 그 밑에 else if는 아예 읽어버리지 않는다는 점을 주의해야한다.
위의 사항을 알아차리고 제일 마지막에 작동해야하는 조건을 가장 위로, 제일 처음에 작동해야하는 조건을 가장 아래로 작성했더니 잘 작동하였다.
728x90
반응형
'JAVASCRIPT' 카테고리의 다른 글
[JAVASCRIPT] 마우스커서 따라 움직이는 효과 (0) | 2023.12.26 |
---|---|
[Javascript] 이벤트리스너 input, change의 차이 (0) | 2023.12.25 |
[JAVASCRIPT] div마다 스크롤 속도 다르게 하기 (0) | 2023.12.24 |
[JAVASCRIPT] SwiperJs, 스크롤하면 세로로 움직이는 사진,글자 (2) | 2023.12.23 |
[Javascript] 0에서 특정 숫자까지 자동으로 커지게 하기 CountUp (0) | 2023.12.20 |