티스토리 뷰
반응형
이번 글에서는 Spinner라고 하여 Button에 애니메이션을 넣고 돌아가는 버튼을 구현해보려 합니다.
샘플 코드
샘플 코드는 Codepen이라는 것으로 보여지도록 처리하였습니다.
See the Pen Untitled by Jay Park (@jyp90) on CodePen.
HTML
버튼은 심플하게 일반 버튼 내에 span 태그가 있는 것으로 설정하였습니다.
<button type="button" class="button" onclick="this.classList.toggle('loading')">
<span class="btn_text">Save</span>
</button>
CSS
기본적인 스타일과 버튼의 이미지를 부여합니다.
body {
font-family: system-ui;
background: #f06d06;
color: white;
text-align: center;
}
.button {
position: relative;
padding: 8px 16px;
background: skyblue;
border: 5px;
outline: none;
border-radius: 2px;
cursor: pointer;
}
.button:active {
background: #007a63;
}
.btn_text {
font: bold 20px "Quicksand", san-serif;
color: #ffffff;
transition: all 0.2s;
}
.loading .btn_text {
visibility: hidden;
opacity: 0;
}
.loading::after {
content: "";
position: absolute;
width: 16px;
height: 16px;
top: 0;
left: 0;
right: 0;
bottom: 0;
margin: auto;
border: 4px solid transparent;
border-top-color: #ffffff;
border-radius: 50%;
animation: loading-spinner 1s ease infinite;
}
그리고 모션을 위해 애니메이션을 추가합니다.
@keyframes loading-spinner {
from {
transform: rotate(0turn);
}
to {
transform: rotate(1turn);
}
}
JavaScript
마지막으로 버튼이 작동하게 하기 위한 자바스크립트를 추가합니다.
document.querySelector(".button").addEventListener("click", () => {
theButton.classList.add("loading");
});
반응형
'Client' 카테고리의 다른 글
이미지를 효과적으로 사용하는 방법 (0) | 2023.05.29 |
---|---|
[Web] View Transitions API 가 나오면서 화면 전환이 더 쉬워진다 (1) | 2023.04.02 |
[Javascript] 얕은 복사(Shallow Copy)와 깊은 복사(Deep Copy) (0) | 2023.03.26 |
[JavaScript] null과 undefined를 피하는 방법 (2) | 2023.03.25 |
[Flutter] Android Studio Live Template 설정하기 (0) | 2023.03.05 |
[Flutter] Android Studio SDK 설치 방법 및 호환되는 SDK 체크 (2) | 2023.03.04 |
댓글
공지사항