일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Sticky
- NAV
- scrollevent
- forEach
- classList
- input
- React
- addEventListener
- scroll
- 반복문
- scrollY
- swiperjs
- Animation
- Hover
- 애니메이션
- pointermove
- mousemove
- insertAdjacentHTML
- 스크롤
- NodeList
- swiper
- getBoundingClientRect
- html
- JavaScript
- 확장성
- css
- width
- 이벤트리스너
- localstorage
- For
- Today
- Total
ZeroToHunnit Coding
[Javascript] 다양한 기능들로 만든 멋진 scroll이벤트 본문
위와 같이 스크롤 함에 따라 큰 박스가 3개로 나눠지고 뒤집어져서 뒷면이 나오는 기능을 구현해봤다.
HTML
CSS
우선 section으로 height를 크게 잡아주고 wrapper로 100vw, 100vh의 크기로 position: sticky를 걸어주었다.
그리고 grid 박스는 position:grid로 card-box를 세개로 나누어주었다.
card-box에 position:relative를 걸고 안에 card-front와 card-back을 넣어주고 card-back만 position:absolute를 하여 z-index를 -1로 하여 안보이게 한 후 rotateY로 180도 미리 회전시켜주었다.
그리고 맨 앞에 깔아줄 front 박스를 만들어 position:absolute로 띄어준다. 일종의 트릭이라고 할 수 있다.
* 사실 card-box 3개가 붙어있다가 단순히 떨어지는 것뿐만 아니라 front도 opacity로 조절해준다. 이렇게 한 이유는 지금은 단색으로 background색이 정해져있지만, 만약 사진이라고 가정하면 그냥 div 세개를 떼어냈다가 붙였다 하는 것보다 앞에 가려주고 opacity로 조절하는 것이 더 자연스러울 것이다.
JAVASCRIPT
front박스의 opacity, grid박스의 gap, card요소들의 rotate값들을 일차방정식으로 먼저 구해서 변수로 등록해놓는다.
그리고 조건문으로 특정 scroll값이 되었을 때 실행시켜준다.
rotate의 값이 90이 넘어가면 자연스럽게 앞 뒷면이 바뀌게 조건문을 설정해준다.
- 주의사항
* card-back을 먼저 rotateY 180도를 해준 이유는 180도로 회전되었을 때의 div의 모양은 좌우가 반전된 모양으로 있기 때문에 먼저 돌려주고 javascript안에서도 card-back의 transform값을 cardRotate + 180으로 해준다. 그러면 좌우반전 안되고 제대로 보이는 카드를 만들 수 있다.
* card-front와 card-back을 보면 forEach반복문을 쓴 것을 볼 수 있는데, forEach 반복문은 애초에 array 자료에서 쓰는건데 왜 썼는가?
document.querySelectorAll('.card-front')를 console창에 출력해보면 nodelist라고 뜬다. 처음에 forEach 반복문으로 안쓰고 그냥 style을 변경하려 했을 때 오류가 뜨면서 작동하지 않았다. 이 nodelist를 forEach반복문으로 다루면 오류가 해결된다.
'JAVASCRIPT' 카테고리의 다른 글
[Javascript] Select(콤보박스)에서 선택한 값 출력하기 (2) | 2024.01.09 |
---|---|
[Javascript] 'mouseover'를 사용하여 컨텐츠 보이게하기 (2) | 2024.01.06 |
[Javascript] 현재 스크롤 퍼센트를 나타내주는 bar (2) | 2024.01.03 |
[Javascript] 정규식 알아보기 (0) | 2024.01.02 |
[Javascript] 타이핑 애니메이션 (2) | 2024.01.01 |