instagram clone project(4)-main page(js)
js로 구현한 기능
1. 좋아요 버튼
주요 코드
contentLikeBtn.addEventListener("click", handleLikeBtn);
const handleLikeBtn = (event) => {
const targetLikeBtn = event.target;
targetLikeBtn.classList.toggle("like-btn-fill");
heartbeat(targetLikeBtn);
};
const heartbeat = (targetLikeBtn) => {
targetLikeBtn.classList.remove("heartbeat");
targetLikeBtn.offsetWidth = targetLikeBtn.offsetWidth;
targetLikeBtn.classList.add("heartbeat");
};
코드 설명
like 버튼을 클릭할 때마다 "like-btn-fill" class를 toggle로 넣고 뺀다. 그 때 마다 heartbeat 함수를 호출해서 heartbeat class를 초기화 하고 add하여 animation이 적용되도록 해 준다.
2. 댓글 기능
주요 코드
const handleCommentSubmit = (event) => {
event.preventDefault();
const comment = commentInput.value;
if (comment) {
addComment(comment);
commentInput.value = "";
}
};
const addComment = (comment) => {
//el생성해서 append하는 코드 생략
}
const delComment = (event) => {
const targetcommentLi = event.target.parentNode.parentNode.parentNode;
targetcommentLi.remove();
};
코드 설명
addComment 함수에서 element 생성할 때 innerHtml하면 조금 더 간단 하지만, 댓글 기능 중 삭제와 좋아요 버튼 때문에 버튼들은 createElement했다..->조금 맘에들지 않음.. 따로 함수 생성해서 event읽어도 되나 생각 해봤는데 실행은 안해봤다.ㅋㅎㅋㅎ
3. 아이디 검색기능
주요 코드
searchInput, addEventListener("input", handleSearchinput);
const initSearchInput = () => {
searchInput.value = "";
userIDSelectBox.classList.remove("showing");
};
const handleSearchinput = () => {
userIDList.innerHTML = ``;
const searchKeyword = searchInput.value;
let searchResult = [];
if (!searchKeyword) {
initSearchInput();
} else {
searchResult = IDArr2d.filter(
(userID) => userID[0].indexOf(searchKeyword) !== -1
);
if (searchResult.length > 0) makeResultElements(searchResult);
else userIDSelectBox.classList.remove("showing");
}
};
코드 설명
타이핑을 할 때마다 handleSearchinput함수가 실행됩니다. 그 때마다 filter함수를 이용해서 타이핑을 한 문자열이 있는 arr 요소만 얻어서 element로 생성 해 줍니다.
4. 프로필 메뉴
주요 코드
profileMenuBtn.addEventListener("click", handleProfileMenu);
window.addEventListener("click", hideProfileMenu);
const handleProfileMenu = () => {
profileMenuBox.classList.toggle("showing");
};
const hideProfileMenu = (event) => {
console.log(event.target, profileMenuBtn);
if (event.target !== profileMenuBtn && event.target !== profileMenuBox)
profileMenuBox.classList.remove("showing");
};
코드 설명
프로필 메뉴 버튼을 누를 때는 메뉴가 토글되어 나타나고 다른부분을 눌렀을 때는 무조건 메뉴가 닫히도록 구현했다. 다른 부분을 눌렀을 때 이벤트를 찾는게 어려웠다. 그리고 버튼 예외처리 하는걸 좀 힘들게 떠올렸다. 이제보니 왤케고민했지..? 싶다.( 해결해 놓고 보면 항상 같은 생각이 드는듯..^^)
Author And Source
이 문제에 관하여(instagram clone project(4)-main page(js)), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://velog.io/@yerin719/instagram-clone-project4-main-pagejs저자 귀속: 원작자 정보가 원작자 URL에 포함되어 있으며 저작권은 원작자 소유입니다.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)