티스토리 뷰
React
인프런 React 강의 듣고 사이트 만들기 _ Front 작업 02. wifi 애니메이션 만들기 (styled-components)
주섬이 2021. 1. 19. 21:48반응형
(강의내용과 큰 상관없습니다. 강의 듣고 결과물 만드는 작업 중입니다.)
작업물에 wifi 애니메이션이 필요해서 제작해보기로했습니다.
뭐 대충 이런거..
딱히 기능은 없고 css 애니메이션으로만..
codepen.io에서 간단한 코드를 발견해서 크기만 수정해서 사용하기로 했습니다.
감사합니다 ㅎㅎ
코드 출처입니다.
https://codepen.io/roncallyt/pen/GymuE
일단 styled-components를 통해 작업하는데, keyframe을 어떻게 처리할까 하고 찾아보다가 발견했고 참고글을 읽고 작업했습니다^^.
공식문서에도 있겠지요. 쉽게 설명해주셨습니다.
공식문서도 확인해봅시다.
styled-components.com/docs/basics#animations
별도로 keyframes를 제공해줍니다.
import styled, { keyframes } from 'styled-components';
이건 완성 코드!
import React from 'react';
import PropTypes from 'prop-types';
import styled, { keyframes } from 'styled-components';
const lineDefaultStyle = `
border: 2px solid transparent;
border-radius: 100%;
`;
const appearIn = (themeColor) => keyframes`
0%{ border-top-color: transparent; }
25%{ border-top-color: ${themeColor}; }
75%{ border-top-color: ${themeColor}; }
100%{ border-top-color: ${themeColor}; }
`;
const appearMiddle = (themeColor) => keyframes`
0%{ border-top-color: transparent; }
25%{ border-top-color: transparent; }
75%{ border-top-color: ${themeColor}; }
100%{ border-top-color: ${themeColor}; }
`;
const appearOut = (themeColor) => keyframes`
0%{ border-top-color: transparent; }
25%{ border-top-color: transparent; }
75%{ border-top-color: transparent; }
100%{ border-top-color: ${themeColor}; }
`;
const OutLine = styled.div`
${lineDefaultStyle}
margin: 1px auto;
width: 25px;
height: 30px;
border-top-color: ${props => props.themeColor};
animation: ${props => appearOut(props.themeColor)} 1.5s infinite linear
`;
const MiddleLine = styled.div`
${lineDefaultStyle}
margin: 1px auto;
width: 18px;
height: 25px;
border-top-color: ${props => props.themeColor};
animation: ${props => appearMiddle(props.themeColor)} 1.5s infinite linear
`;
const InLine = styled.div`
${lineDefaultStyle}
margin: 1px auto;
width: 14px;
height: 23px;
border-top-color: ${props => props.themeColor};
animation: ${props => appearIn(props.themeColor)} 1.5s infinite linear
`;
const Dot = styled.div`
${lineDefaultStyle}
margin: 2px auto;
width: 3px;
height: 3px;
border: 0;
background: ${props => props.themeColor};
`;
const Wifi = (({ themeColor }) => {
return(
<OutLine themeColor={themeColor}>
<MiddleLine themeColor={themeColor}>
<InLine themeColor={themeColor}>
<Dot themeColor={themeColor} />
</InLine>
</MiddleLine>
</OutLine>
);
});
Wifi.propTypes = {
themeColor: PropTypes.string,
};
Wifi.defaultProps = {
themeColor: '#333',
};
export default Wifi;
테마색으로 라인을 그려주려고 외부에서 props를 전달받습니다.
뭔가 중복되는 코드들을 줄일 수 있을 것 같은데, 최적화는 추후에..^^;;
완성된 와이파이!
근데 왜 노트북에서는 잘 되던게, 데탑오니까 애니메이션 반복이 안되는지는 봐야겠습니다~
infinite가 빠졌군요. ㅎ 코드는 수정해두었습니다.~
여튼 약간 엉성하긴 한데, 좋습니다. 굿굿
반응형
'React' 카테고리의 다른 글
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- JS
- 차이
- html
- 뷰
- 프로젝트
- JavaScript
- 타입스크립트
- 메서드
- 통신
- 제로초
- 강의
- 아티클
- Study
- Method
- 코딩애플
- jQuery
- vue.js
- 자바스크립트
- Article
- 리액트
- frontend
- React
- TypeScript
- 제이쿼리
- 기초
- VUE
- css
- 브라우저
- 공부
- 프론트엔드
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함