
Vanilla JS로 나만의 MBTI 페이지 만들기
지난 회고와 멘토링 & 코드 리뷰를 기반으로 앞서 만든 MBTI 페이지 리팩토링을 진행하였다.
질문지가 바뀔 때마다 이전 선택지 버튼을 display: none으로만 관리했는데 remove()로 제거
answer.addEventListener("click", () => {
const children = document.querySelectorAll('.answer-box__list');
let target = qnaList[qIdx].a[idx].type; // select index (mbti 알파벳 위치)
for(let i=0; i<target.length; i++) {
select[target[i]] += 1; // select 배열에서 각 mbti 위치의 값 증가
}
for(let i=0; i < children.length; i++) {
children[i].remove(); // 이전 버튼 disply: none; 에서 remove로 삭제함
}
goNext(++qIdx);
}, false);
data.js를 index.html 내에 전역으로 선언하지 않고 필요한 data를 import하여 사용
import { qnaList, MBTIType, infoList } from "./data.js";
재시작 버튼 생성하여 클릭 시 reload
// 재시작
function restart() {
const restartBtn = document.querySelector('.restart-button');
restartBtn.addEventListener('click', () => {
location.reload();
})
}
이미지 로딩이 느려지는 이슈 -> 아래의 방법들로 로딩 속도가 개선되었지만 여진히 로딩 속도가 느림
재할당하지 않는 변수는 let말고 const로 선언
MBTI 별 설명 추가
export const infoList = [
{
name: 'INTP',
desc: '지적 호기심이 높으며 잠재력과<br> 가능성을 중요시하는 당신!', // 추가 설명
department: '화학공학과<br> 생명공학과<br> 컴퓨터공학과'
},
...
질문지와 선택지 가독성 향상
저장하기 버튼 생성하여 클릭 시 결과 캡쳐 이미지 다운됨
- html2canvas 라이브러리 사용
// 결과 이미지로 저장하기
function save() {
const shareBtn = document.querySelector('.save-button');
shareBtn.addEventListener('click', () => {
html2canvas(document.querySelector('#capture')).then(canvas => {
let imgEl = document.createElement('a');
imgEl.href = canvas.toDataURL('imge/png');
imgEl.download = '나에게_맞는_학과는.jpg';
imgEl.click();
});
})
}
시작화면

질문화면

결과화면

이미지 저장 버튼 클릭 시 이미지 파일 다운로드

저장된 jpg 파일
