HTML과 CSS

[소스코드 분석] 2주차 예제

차돌박이츄베릅 2023. 5. 2. 21:22

1. 구조 분석

 

[recentSearch.js]

1. 변수 선언

  • 문서객체 상수 : 사용할 문서 객체들 읽어들이기. 제이쿼리 객체라 $~로 시작하는 상수명 사용
  • isRecentSearch 변수 : 자동완성 기능 상태 변수. 불값으로 저장할거라 is~로 시작하는 변수명 사용
  • recentSearchData 변수 : 최근 검색어와 날짜 저장할 배열을 변수에 저장

 

2. 함수 : 상수 저장

  • createRecentItem 함수 : 최근검색어 초기화 후 리스트 추가함
  • cleanInput 함수 : 검색 입력창 초기화
  • deleteSelectedItem 함수 : recentSearchData.splice(매개변수, 1);
  • showOlnyRecentItem 함수 : 조건에 따른 분기-recentSearchData길이가 0이면 자동저장 텍스트 변경하고 조기리턴,최근검색어만 보이게 화면 조작
  • showOnlnykwdOff 함수 : 자동저장 껐을 때의 화면 조작
  • showOnlnykwdNone함수 : 매개변수 있으면 callback함수 실행, 전체삭제 후의 화면 조작

 

[script.js]

3. 이벤트 걸기

  • 로드 완료 시 :
    input검색창에 focus 이동
    recentSearchData값이 없으면 showOnlnykwdNone 함수 실행
  • 검색창input에 click 이벤트 :
    상태에 따른 분기 : isRecentSearch가 false면 조기리턴 ㄱ
    최근검색어창 조작
  • body에 click이벤트 :
    조건 : e.currentTarget == e.target (body 영역에서 search 영역 을 제외한 순수한 부분)
    최근검색어창 닫고 접펼기능 조작
  • 접기펼치기 click 이벤트 : 
    검색기록창 toggle
    접펼 기능 조작

  • form에 submit 이벤트 : 
    기본 이벤트 막음(다른 페이지로 리다이렉션 되는 것을 방지)
    최근 검색어 저장
    조건에 따른 분기 : 검색창에 아무것도 입력하지 않으면 alert 후 조기리턴 ㄱ
    조건에 따른 분기 : isRecentSearch가 false면 cleanInput함수 실행 후 조기리턴 ㄱ
    현재날짜 가져와서 상수에 저장
    recentSearchItem 상수 : .search, .date 프로퍼티로 recentSearchData 배열에 넣을 객체 생성
    recentSearch 상수 : recentSearchItem 참조
    recentSearchData 배열에 앞에서 부터 recentSearch 삽입
    createRecentItem 함수 호출 : 최근검색어 li 만듦
    cleanInput 함수 호출 : 검색창 초기화함
    showOlnyRecentItem 함수 호출 : 최근 검색 기록 화면만 보여줌
    최근검색창 보여주게 화면조작

  • option에 click 이벤트 : 
    상수 isDelete 생성하고, confirm으로 사용자한테서 불값 받아서 저장
    사용자가 true값을 줬을 때 최근검색어 데이터 초기화, createRecentItem 함수 호출, showOnlnykwdNone 함수 호출

  • search에 click 했을 때 '.bt_item._del'삭제버튼에 이벤트 : 
    상수 index 생성하고, 값은 부모list data-rank에서 받아서 저장
    deleteSelectedItem(매개변수index넘김) 함수 호출 : 개별 삭제
    createRecentItem 함수 호출: 최근 검색어(li) 다시 만들기
    recentSearchData 의 length가 0 이면 showOnlnykwdNone 함수 호출 : 전체 삭제 후의 화면 보여줌

  • 자동저장 끄기 옵션에 click 이벤트 :
    상수 생성
    조건에 따른 분기 : 확인창에서 취소누르면 조기리턴
    조건에 따른 분기 : isRecentSearch 상태가 false이면 반대로 true할당, showOlnyRecentItem 함수 호출하고 조기리턴
    isRecentSearch 상태가 false이면 반대로 true할당, showOnlnykwdOff 함수 호출

 

 


2. 배운 점

컴포넌트 바깥 영역을 클릭했는지

// search 바깥쪽 클릭시( body 영역에서 search 영역 을 제외한 부분 )
// 최근검색어 영역 닫기
$body.on('click', function(e){
    // e.currentTarget == e.target 이 같다면
    // 현재 영역은 serach를 제외한 순수한 body 부분
    if(e.currentTarget == e.target){
      // 최근 검색창 닫기
      $autoFrame.hide();
      // 펼치기, 접기 fold 태그 삭제
      $nautocomplete.removeClass('fold');
    }
  })

 

 

검색창에 아무것도 입력하지 않았을 때

  const query = $input.val();
  // 검색창에 아무것도 입력하지 않고 검색할 경우 조기리턴
  if(!query){ ...}