일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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
- 서초구보건소 #무료CPR교육
- BlockFormattingContext
- 화살표2개
- react
- alias설정
- 제어컴포넌트
- es6
- ㅡ
- 리액트
- ?? #null병합연산자
- useQueryClient
- vite
- transition
- DOM
- 부모패딩
- 부모요소의 패딩 무시
- debouncing
- CustomHook
- accordian
- twoarrow
- parent padding
- tailwindCSS
- Carousel
- createPortal
- 함수형프로그래밍
- BFC
- QueryClient
- ignore padding
- 문제해결
- 조건부스타일
Archives
- Today
- Total
프론트엔드 첫걸음
Carousel 만들기 본문
[코딩애플 JavaScript 입문과 웹 UI개발] 강의 수강 후 배운 것을 정리한 것입니다.
https://codingapple.com/course/javascript-jquery-ui/
캐러셀은 CSS가 관건이다.
사진이 들어가는 slide list는 사진크기의 3배로 두고
사진을 하나만 보여주는 slide container는 사진크기의 1배로 두고, overflow:hidden을 주면된다.
img {
vertical-align: bottom;
}
.slide-container {
overflow: hidden;
width: 30vw;
}
.slide-list {
background-color: grey;
width: 90vw;
transition: all 1s;
display: flex;
}
.slide-box {
width: 30vw;
}
.slide-box img {
width: 100%;
}
그리고 나서 자바스크립트에서는 클릭할때마다 하나 사진크기만큼 왼쪽으로 이동시킨다.
margin-left를 마이너스 사진크기만큼 하는 것이다.
margin-left보다 translateX가 더 자연스럽게 이동한다.
사진크기가 30vw일때 아래와 같은 javascript 코드를 사용하면 된다.
document.querySelector('.slide-1').addEventListener('click', () => {
document.querySelector('.slide-container').style.transform =
'translateX(0vw)';
});
document.querySelector('.slide-2').addEventListener('click', () => {
document.querySelector('.slide-container').style.transform =
'translateX(-30vw)';
});
document.querySelector('.slide-3').addEventListener('click', () => {
document.querySelector('.slide-container').style.transform =
'translateX(-60vw)';
});
중복코드가 많아 수정해보았다.
참고로 이미지 width를 구해서 px 이동하게 한 방법은
화면을 축소시키는 등 뷰포트를 변경시켰을 때 이상하게 작동했다.
이래서 vw단위를 쓰는거구나 했다.(반응형 페이지를 만들 때 vw, vh단위를 쓴다고 한다.)
이미지 길이 width 하드코딩할수밖에 없는건가..ㅠㅠ
//let imgWidth = document.querySelector('.slide-box').clientWidth;//실패!
let width = 30;
let list = document.getElementsByClassName('slide');
for(let i = 0; i < list.length; i++ ) {
document
.querySelector('.slide-' + (i + 1))
.addEventListener('click', () => {
document.querySelector(
'.slide-list'
).style.transform = `translateX(${-width * i}vw)`;
});
};
어쨌든 응용하면 번호버튼 아닌 좌 우 버튼으로 이동하는 캐러셀도 만들 수 있다.
CSS 메뉴에 넣으려다가 이미지를 translate하는 개념이 더 어려운 것 같아서 javascript에 넣었다.
캐러셀은 여러가지 방법으로 만들 수 있다.
여러가지 방법을 찾아보고 더 좋은 방법을 찾게된다면 다시 포스팅하겠다.
코드펜에서 보기
See the Pen carousel by JEONG (@cona) on CodePen.
'개발 공부 > Javascript' 카테고리의 다른 글
[문제해결] 동적으로 추가한 HTML에 이벤트 붙이기 (insertAdjacentHTML, 이벤트 위임) (0) | 2022.07.20 |
---|---|
스크롤이 끝나면 alert 띄우기 - removeEventListener (0) | 2022.07.16 |
async , defer - javascript 렌더링 순서 바꿔 성능높이기 (0) | 2022.07.14 |
이벤트 버블링과 stop propagation (0) | 2022.07.09 |
NodeList와 Array의 차이점 (0) | 2022.04.03 |