일단 내용 추가함 (html)
circle-item에 호버하고 클릭하면 그 자리 고정 되게끔 변경 (js, css)
=> circle-item에 호버링 : 아이콘만 강조 (자리는 그대로)
=> circle-item을 클릭 : 아이콘 강조된채로 중앙으로 이동, 같은 key값의 desc.item 강조
circle-item이 초기화 될때도 애니매이션 추가하기
=> 기존에는 초기화 될때 transform이 ""로 되어 있어서 이동하는 느낌이 아니라 걍 초기화면이 나옴
transform을 위해 초기 위치 (css로 원형 정렬 해뒀음)를 한번 더 저장!item.dataset.originalTransform = window.getComputedStyle(item).transform;)function removeActiveStates() 설정 item.dataset.originalTransform로 변경해주자item.style.transition = "transform 1s ease-in-out"/* 기본 세팅 */
document.addEventListener("DOMContentLoaded", () => { // 이벤트리스너 - html 로드된 후, javascript가 실행
const circleItems = document.querySelectorAll(".circle-item");
circleItems.forEach((item) => {
// 초기 transform 값을 가져와서 아래처럼 저장하기 !
item.dataset.originalTransform = window.getComputedStyle(item).transform;
});
/*console.log("원래 위치 저장:", circleItems); ---디버깅 */
const descItems = document.querySelectorAll(".desc-item"); // 써클아이템과 설명아이템을 불러온다
/* 초기 화면 세팅 */
function removeActiveStates() {
document.querySelectorAll(".desc-item, .circle-item").forEach(item => {
item.classList.remove("active", "clicked"); // 써클과 설명에서 active,click을 제거 -> 강조했던 거 초기화
if (item.classList.contains("circle-item")) {
item.style.transition = "transform 1s ease-in-out"; // 애니매이션 효과
item.style.transform = item.dataset.originalTransform; // 클릭 해제 시 원래 위치로 되돌리기
}
});
}
/* 같은 data-key를 가진 써클아이템과 설명아이템을 찾아서 active, clicked를 준다 */
function activateItems(key) {
document.querySelectorAll(`.desc-item[data-key="${key}"], .circle-item[data-key="${key}"]`).forEach(el => {
el.classList.add("active", "clicked");
/* 클릭된 circle-item은 중앙으로 이동 */
if (el.classList.contains("circle-item")) {
el.style.transform = "translate(0, 0) scale(1.3)";
} // ↳ 위치(중앙) ↳ 크기
});
}
/* 이벤트리스너 추가 - 클릭하면 중앙으로 이동& 강조되는데 -> 이것을 유지 */
circleItems.forEach((item) => { // 모든 circle 아이템에 클릭 이벤트 추가
const key = item.dataset.key;// 아이템의 데이터 값을 가져온다
item.addEventListener("click", (event) => {
event.stopPropagation(); // 이벤트 전파 방지 (circle-item 클릭 시, document의 클릭 이벤트((밑 문단))가 실행되지 않아서 강조 효과가 유지됨)
removeActiveStates();// 다른 클릭된 요소들 초기화
activateItems(key);// 같은 data-key를 가진 desc아이템도 강조
});
});
/* 다른 곳(페이지의 아무곳) 클릭하면 초기화 */
document.addEventListener("click", () => {
removeActiveStates();
});
});
오늘은 진짜 어려웠다,,,!! 그치만 다 하고나니 유익하다는 생각이 마구 마구 든다 ㅎㅎ
중간중간에 아이템이 술래잡기 하듯 도망가서 웃겼고
git pull 할때마다 아까 분명 지웠던 텍스트들이 그대로 있어서?
몇번이나 지웠는데도 있어서.. 울고싶었다ㅠ
팀원분들이 내일 해결해주실 것이다..... 우리조 너무 좋은데 다음주에 팀 구성 바뀐다니 슬프다 ㅠ
암튼,,, 힘내자 화텡 !!