1. 미리보기
box-shadow를 사용해 네온효과를 주고, 마우스가 지나가면 transition-duration을 달리 주어 색을 나타나게 하는 애니메이션을 만들어보자!
See the Pen js_100_day11 by KumJungMin (@kumjungmin) on CodePen.
2. 코드 설명
1) html
<div id="container"> <!--[1]-->
</div>
- [1] 부모요소이다. 이 부모요소 내부에 js를 사용해, 여러 개의 자식 요소를 만들 예정이다.
2) js
- [2]
querySelector
로id="container"
요소를 가져온다.const container = document.querySelector('#container'); //[2] const SQUARE_NUM = 500; //자식요소 개수 const colors = ['#e74c3c', '#8e44ad', '#3498db', '#e67e22', '#2ecc71']; //랜덤색깔들
- [3]
:setColorToEl
함수는 마우스hover
시, 해당 요소에 색 & 그림자를 지정한다.
:box-shadow
은 4개의 인자값을 가진다. (수평그림자, 수직그림자, 흐림정도, 그림자가 드리우는 정도)
:box-shadow
에서쉼표(,)
를 사용하면 그림자들을 겹쳐 사용할 수 있다.function setColorToEl(element) { //[3] set random color const color = getRandomColor(); element.style.background = color; element.style.boxShadow = `0 0 2px ${color}, 0 0 10px ${color}`; //(그림자를 겹치면 빛나는 네온 느낌 낼 수 있음!) }
- [4]
removeColorFromEl
함수는moveover
시, 해당 요소에 색 & 그림자를 변경한다.function removeColorFromEl(element) { //[4] const color = getRandomColor(); element.style.background = '#1d1d1d'; element.style.boxShadow = `0 0 2px #000`; }
- [5]
getRandomColor
함수는 colors(배열)에서 랜덤색깔을 return한다.function getRandomColor() { //[5] return colors[Math.floor(Math.random()*colors.length)] }
[6] 반복문을 사용해
SQUARE_NUM
개의 자식요소를 생성하고 부모에 추가한다.for(let i=0; i<SQUARE_NUM; i++) { //[6] const square = document.createElement('div'); square.classList.add('square'); square.addEventListener('mouseover', () => { setColorToEl(square); }); square.addEventListener('mouseout', () => { removeColorFromEl(square); }); container.appendChild(square); }
3) css
- [7]
flex-wrap: wrap
을 사용해 container 내부 자식요소들을 줄바꿈한다.
#container {
display: flex;
flex-wrap: wrap; /*[7]*/
max-width: 400px;
}
- [8]
transition
에2s
를 주어, 천천히 효과가 일어나게 한다. - [9] 자식요소
hover
시,transition-duration: 0s
로 하여 효과가 빨리 일어나게 한다.
=> 위 두 코드로 인해,[moveover시 빠르게 효과 발생]
,[mouseout시 느리게 효과 발생]
하게 된다..square { width: 16px; height: 16px; background-color: #1d1d1d; margin: 2px; box-shadow: 0 0 2px #000; transition: 2s ease; /*[8]*/ &:hover { transition-duration: 0s; /*[9]*/ } }
반응형
'개발 기술 > css 애니메이션 (with js)' 카테고리의 다른 글
계산기 만들기(with js, css) (0) | 2021.09.27 |
---|---|
(css, js) 햄버거 메뉴 애니메이션 만들기 (0) | 2021.09.26 |
이미지 로딩 애니메이션(feat. 저화질, skeleton loading) (0) | 2021.09.23 |
로딩 화면 만들기 (with css) (0) | 2021.09.21 |
Traffic Light(신호등) 애니메이션을 만들자 (0) | 2021.09.16 |
댓글