반응형
Vanilla js와 css로 부드럽게 움직이는 toggle button을 만들어보자!
Preview
On
HTML
<div style="height: 2rem; position: relative;">
<div class="optionBody optionBodyTrue">
<div class="optionText">
<span class="Text">On</span>
</div>
<div class="optionCircle optionCircleTrue"></div>
</div>
</div>
CSS
- 뒷 배경, 글자, 버튼 세개가 같은 위치이기 때문에 z-index로 조정한다. 낮을수록 더 뒤(바닥)에 위치하고, 가장 높은 것이 가장 앞에 위치하여 뒤에 있는 요소를 가릴 수 있다.
- z-index 속성이 동작하려면 반드시 position 속성을 작성해야한다!!
- absolute로 하면 transform이 먹지 않아서 버튼만 relative로 두었다.
- 스타일이 변경될 때 휙 휙 변경되는것이 아니라 천천히 변경되어 애니메이션 효과를 주고 싶은 경우 transition 속성을 설정하면 된다!! 지속 시간, 베지어 모양(프리미어나, 에펙 써본 사람은 키프레임에서 베지어 모양 생각하면 됨!) 등등을 설정 가능하고 자세한 건 갓갓 MDN 확인!
<style>
.optionBody{
width: 5.5rem;
height: 2rem;
border-radius: 15px;
z-index: 0;
position: absolute;
cursor: pointer;
transition-duration: 0.5s;
}
.optionBodyTrue{
background-color: #FFC107;
}
.optionBodyFalse{
background-color: #bebebe;
}
.optionText{
padding-top: 4px;
padding-left: 30px;
z-index: 1;
position: absolute;
}
.optionCircle {
margin-top: 4px;
margin-right: 3px;
margin-left: 3px;
width: 1.5rem;
height: 1.5rem;
border-radius: 50%;
background-color: white;
z-index: 2;
position: relative;
transition-duration: 0.5s;
}
.optionCircleTrue {
transform: translate(57px, 0px)
}
.optionCircleFalse {
transform: translate(1px, 0px)
}
</style>
JS
- element를 잡기 위해 document.querySelector('.클래스명 or #id명 or 태그명') 을 사용한다.'
- classList.toggle('클래스명') : 클래스명이 있으면 없애고, 없으면 넣어라 -> 말그대로 토글해주는 기능
- .addEventListener('click', toggleOption) : 클릭이벤트 발생시 toggleOption 함수를 실행시켜라
<script>
function toggleOption() {
document.querySelector('.optionBodyTrue').classList.toggle('optionBodyFalse')
document.querySelector('.optionCircleTrue').classList.toggle('optionCircleFalse')
let text = document.querySelector('.Text').innerText
if (text === 'On') {
document.querySelector('.Text').innerText = 'Off'
} else {
document.querySelector('.Text').innerText = 'On'
}
}
document.querySelector('.optionBody').addEventListener('click', toggleOption)
</script>
++
- 물론 위 방법만 있는 건 아니다. 본인도 여차저차 찾아보다가 발견해서 만들어본거라 더 좋은 코드가 있을 수 있다!
- 물론 커스텀 가능한 라이브러리도 많이 있으니 라이브러리 사용하는 것도 좋다!
- 하지만 연습삼아 해보면 좋을듯!
반응형
'Language > Java Script' 카테고리의 다른 글
[Java Script & CSS] 페이지네이션 스크롤 인터렉티브 구현! (Pagination, Scroll Animation / Interactive) (0) | 2021.07.10 |
---|---|
[Vanilla Java Script] 변수 let, const, var (0) | 2021.06.24 |