이름:
메일:
가입일:
2023-05-06 00:54조회수: 1613[운영자]영이
순수 Javascript로 fade in 구현하기!
HTMLElement.prototype.fadeIn = function(interval){
if(!this.classList.contains('fadeChanging')){ //1000
this.classList.add('fadeChanging')
const originOpacity = parseInt(window.getComputedStyle(this).opacity)
this.style.opacity = originOpacity;
let opacity = parseInt(originOpacity);
const fadeInterval = (1 - originOpacity)/(interval ? interval/20 : 1000/20)
const SetInterval = setInterval(()=>{
if(this.style.opacity < 1){
this.style.opacity = opacity;
opacity += fadeInterval
} else {
this.style.opacity = 1
this.classList.remove('fadeChanging')
clearInterval(SetInterval)
}
},20)
}
}
DOM을 구성하는 HTML 요소들은 모두 HTMLElement를 상속받기 때문에,
HTMLElement의 prototype에 method를 추가하면
HTML 태그를 구성하는 모든 요소들은 __proto__ 속성을 통해 fadeIn을 상속 받을 수 있게 된다.
또 fadeIn이 실행되는동안, 함수의 중복실행을 막기 위해
fadeChanging이라는 클래스를 붙여서
실행되는 동안에는 추가 실행을 막아버린다.
이 함수의 핵심은 interval 인자인데,
interval에 1000이라는 숫자가 들어오면 정확하게 1초동안 fadein이 실행되어야 하기 때문에
(1 - originOpacity)/(interval ? interval/20 : 1000/20)
(1초동안 변화해야할 총 opacity)/(애니메이션은 20ms마다 일어나므로, 1초를 20으로 나눈값)
이런 계산식으로 구현했다.
아무래도 this의 바인딩 때문에 화살표함수보다는 일반 function을 사용했는데,
아무리 고민해봐도 화살표함수는 여기서 사용이 불가능하다.
this를 가져올 방법이 없기 때문이다.
fadeOut은 fadeIn의 역순으로 구현하면
역시 간단하게 코드르 만들 수 있다.
.
javascript) 라이브러리 없이 깊은 복사 구현하기
string 1 undefined null true위와 같은 원시타입 데이터는복사를 하면 바로 깊은 복사가 일어난다.let a = 1 // 1 let b = a // 1둘은 전혀 ...
자바스크립트 배열 고차함수 직접 구현하기(map, reduce, filter, forEach, sort) 프론트엔드 코딩테스트
Array.prototype.customMap = function(callback, thisArg) { const newArr = []; for (let i = 0; i...
순수 Javascript로 fade in 구현하기
순수 Javascript로 fade in 구현하기!HTMLElement.prototype.fadeIn = function(interval){ if(!this.classList.contains('fadeChanging')){ //1000 this.classList.add('fadeChanging') const originOpacity = parseInt(window.getCompute
PHP로 사이트맵 자동 업데이트하기 (sitemap.xml)
검색엔진 최적화를 위해 구글 서치콘솔에 sitemap.xml을 제출했다.이 포트폴리오 겸 블로그는 글이 계속 포스팅 되기 때문에 일일히 수동으로 site...
HTML 페이지가 두 번 로딩되면서 로딩 속도가 느려질때 (Network waterfall twice times download)
현재 포트폴리오용 웹사이트 개발을 하던 나는 내 웹사이트가 뭔가 이상하다는 것을 발견했다.크롬의 개발자도구(F12)에서 Network 탭을 보면 내 웹사이트에서 ...
댓글: 0