Etc./[Fastcampus] 웹퍼블리싱 완전 정복 학습 일지
[패스트캠퍼스] 웹퍼블리싱 강의 6주차 - 자바스크립트 응용예제(1)
임성장
2023. 7. 14. 23:12
728x90
오늘도 이어서 국비지원교육 과정으로 이뤄지는 "웹퍼블리싱 완전 정복 : 모션 디자인으로 완성하는 반응형 웹 디자인" 강의 중 자바스크립트와 SCSS을 통해 만드는 응용 예제를 다룰 것이다. 개발 공부를 하면서 처음 본 라이브러리에 대해 소개도 할 것이며, 어떻게 구현하면 좋을지 전혀 감이 잡히지 않았던 문제에 대해서도 자세히 설명할 것이다.
요약
- 자동정렬기능의 반응형 갤러리 웹
- 시간(낮, 밤)에 따라 UI가 변하는 웹
1. 자동정렬기능의 반응형 갤러리 웹
CSS
- transform은 인라인 요소에 적용이 되지 않음.
- 너비값을 주지 않고 특정 위치에 margin 값을 주면 margin 값을 제외한 전체 길이를 너비로 갖음.
JS
Isotope
Isotope · Filter & sort magical layouts
Install Download CDN Link directly to unpkg. Package managers Install with npm: npm install isotope-layout Install with Bower: bower install isotope-layout --save License Commercial license If you want to use Isotope to develop commercial sites, themes, pr
isotope.metafizzy.co
// 웹페이지의 모든 DOM과 리소스가 로딩이 완료되면
window.addEventListener('load', ()=>{
const grid = new Isotope("section", { // 컨테이너 이름
itemSelector: "article", // 배치하고 싶은 요소
columnWidth: "article", // 기준되는 아이템 이름
transitionDuration: "0.5s" // 트랜지션 속도
})
- window load Event는 dom이 출력되는거 뿐만 아니라 이미지, 비디오 등 소스 자료가 전부 출력되는 거까지를 말한다.
- 이미지가 겹치는 오류가 생기는 이유
- 이미지가 로딩이 되지 않아 높이를 인지하지 못해서
- 실제 돔이 로딩 완료되는거랑, 소스 자료가 출력이 완료가 되는건 별개
- 이미지가 겹치는 오류가 생기는 이유
- isotope.js 사용방법
- 로컬로 파일을 저장해서 스크립트 불러내기(<script defer src="js/isotope.pkgd.min.js"></script>)
- 링크로 cdn 파일 연결
- isotope.js HTML 예시
<div class="grid">
<div class="grid-sizer"></div>
<div class="grid-item"></div>
<div class="grid-item grid-item--width2"></div>
...
</div>
- 필터
// odd, even, all을 변수로 저장
const btn_a = e.currentTarget.querySelector('a');
// 누른 a 태그의 링크를 변수로 저장
const a_href = btn_a.getAttribute("href");
// a 태그의 링크와 이름이 일치만 class만 출력
grid.arrange({filter: a_href})
성능적 누수 방지
// 클래스 on을 포함하고 있는지 확인
const isOn = e.currentTarget.classList.contains('on')
// 있으면 함수 실행 정지
if(isOn){
return false
}
2. 시간(낮, 밤)에 따라 UI가 변하는 웹
JS
DOM 요소의 클래스 초기화
DOM.className = '';
forEach
arr.forEach(callback(currentvalue[, index[, array]])[, thisArg])
- 주어진 callback을 배열에 있는 각 요소에 대해 오름차순으로 한 번씩 실행합니다.
- currnetValue: 처리할 현재 요소
- index: 처리할 현재 요소의 인덱스
- array: forEach()를 호출한 배열
forof
for (variable of iterable) {
statement
}
- variable: 각 반복에 서로 다른 속성값
- iterable: 반복되는 열거가능한 속성이 있는 객체
자바스크립트로 시간 가져오기
let now = new Date(); // 시간 객체 가져오기
let hr = now.getHours(); // 시간 가져오기
let min = now.getMinutes(); // 분 가져오기
let sec = now.getSeconds(); // 초 가져오기
- 시간 가져오는 간단한 예제
const numbers = document.querySelectorAll('.screen span');
setInterval(()=>{
let now = new Date();
let hr = now.getHours();
let min = now.getMinutes();
let sec = now.getSeconds();
if(hr < 10) hr = '0'+ hr;
if(min < 10) min = '0'+ min;
if(sec < 10) sec = '0'+ sec;
numbers[0].innerText = hr;
numbers[1].innerText = min;
numbers[2].innerText = sec;
}, 1000)
비구조할당
<div class="screen">
<em class="am">am</em>
<em class="pm">pm</em>
</div>
const [am, pm] = document.querySelectorAll('.screen em');
- DOM 요소를 불러옴과 보시에 각 변수에 am, pm을 저장
- 배열, 객체 등 여러 요소를 변수에 저장할 때 용이
728x90