inflearn logo
강의

Khóa học

Chia sẻ kiến thức

Những bước đầu tiên với JavaScript dành cho Web Frontend

Tạo thanh bookmark

북마크바 디폴트가 "북마크 열기"로 뜹니다.

Đã giải quyết

130

gjwjsgksskf9539

2 câu hỏi đã được viết

1

강의 : 5. 북마크바 만들기

북마크바 디폴트 화면이 '북마크 열기'(bookmark-close)로 뜨면서 북마크가 열려있는 상태(?)로 나옵니다.

그리고 북마크 열기를 클릭하면, 의도한 바처럼 '북마크 열기'(bookmark-close)가 뜨면서 북마크가 닫힌 상태로 바뀌고, 다시 클릭 시 '북마크 닫기'(bookmark-open)가 뜨고 북마크가 열린 상태로 나옵니다.

즉, 두번째 액션부터 정상적으로 작동이 되는데요 ㅠㅠ

 

[디폴트 화면]

1.PNG.webp

 

효빈 강사님께서 작성한 예시 그대로 작업했는데 뭐가 문제인걸까요??

<!-- 북마크 열린 상태 -->
<div class="bookmark-open" id="bookmark-open">
  <div id="bookmark-open-btn">북마크 닫기</div>
</div>
<!-- 북마크 닫힌 상태 -->
<div class="bookmark-close" id="bookmark-close">
  <div id="bookmark-close-btn">북마크 열기</div>
</div>
<div class="bookmark-bar" id="bookmark-bar">
  <!-- 북마크 바 -->
</div>
.bookmark-open {
  display: flex;
  justify-content: flex-end;
  position: absolute;
  top: 0;
  right: 0;
  width: 240px;
  height: 20px;
  padding: 15px 30px;
  font-size: var(--xsmall);
  background-color: rgba(0, 0, 0, 0.5);
  color: #fff;
}
.bookmark-close {
  display: flex;
  justify-content: flex-end;
  position: absolute;
  top: 0;
  right: 0;
  width: 240px;
  height: 20px;
  padding: 15px 30px;
  font-size: var(--xsmall);
  background-color: rgba(0, 0, 0, 0.5);
  color: #fff;
}
.bookmark-open div {
  cursor: pointer;
}
.bookmark-close div {
  cursor: pointer;
}
.bookmark-bar {
  position: absolute;
  top: 50px;
  right: 0;
  min-height: calc(100vh - 70px);
  width: 240px;
  padding: 10px 30px;
  background-color: rgba(0, 0, 0, 0.5);
  color: #fff;
}
const bookMarkBar = document.getElementById("bookmark-bar");
const Open = document.getElementById("bookmark-open");
const Close = document.getElementById("bookmark-close");

// 북마크 바 열기 및 닫기
const bookmarkBarToggle = () => {
  const isBookMarkBarOpen = localStorage.getItem("isBookMarkBarOpen");
  if (isBookMarkBarOpen) {
    if (isBookMarkBarOpen === "open") {
      localStorage.setItem("isBookMarkBarOpen", "close");
      bookMarkBar.style.display = "none";
      Open.style.display = "none";
      Close.style.display = "flex";
    } else {
      localStorage.setItem("isBookMarkBarOpen", "open");
      bookMarkBar.style.display = "block";
      Open.style.display = "flex";
      Close.style.display = "none";
    }
  } else {
    localStorage.setItem("isBookMarkBarOpen", "close");
    bookMarkBar.style.display = "none";
    Open.style.display = "none";
    Close.style.display = "flex";
  }
};

document
  .getElementById("bookmark-open-btn")
  .addEventListener("click", bookmarkBarToggle);
document
  .getElementById("bookmark-close-btn")
  .addEventListener("click", bookmarkBarToggle);

javascript dom

Câu trả lời 1

0

hyobin

안녕하세요 은비님 🙂 질문 감사합니다.

'북마크' 관련 div 요소들을 main-container의 바깥에 작성해주셨는지 한 번 확인해보시고,
제가 제공해드린 핸드북과도 코드를 비교해봤을 때 코드 상의 문제가 없으시다면,

지금까지 작성하신 코드를 압축해서 hbin12212@gmail.com 으로 전달 부탁드립니다!
코드를 보내주시면 확인해드리겠습니다!!

휴가로 인해 답변이 늦어진 점 죄송합니다. 감사합니다.

0

gjwjsgksskf9539

메일 보내드렸습니다!

0

hyobin

안녕하세요 은비님! 보내주신 코드를 확인해보았는데요,
해당 오류는 bookmark-toggle.js 에 해당 코드가 없어서 발생하는 오류입니다.

// <--북마크 바-->
const isBookMarkBarOpen = localStorage.getItem("isBookMarkBarOpen");
if (isBookMarkBarOpen === "close") {
    //localstorage에 isBookMarkBarOpen이 close라면
    bookmarkBar.style.display = "none";
    bookMarkOpen.style.display = "none";
    bookMarkClose.style.display = "flex";
} else {
    //localstorage에 isBookMarkBarOpen이 open이라면
    bookmarkBar.style.display = "block";
    bookMarkOpen.style.display = "flex";
    bookMarkClose.style.display = "none";
}

페이지 처음 접속 시, 로컬 스토리지에 저장된 isBookMarkOpen 값을 읽어 어떤 상태인지를 확인하고 요소를 숨겨야하는데 해당 코드가 없어서 값을 읽어오지 못하는 것 같습니다!

실전 프로젝트 개발 - 북마크 바 만들기 강의를 다시 한 번 수강해보시거나, https://one-step-js.hyobb.com/47e8db22-f3ed-4051-a2f6-87e8634b5572 핸드북에 있는 코드를 다시 한 번 살펴보시면 좋을 것 같습니다 🙂 감사합니다!

0

gjwjsgksskf9539

(function () {
  const bookMarkBar = document.getElementById("bookmark-bar");
  const Open = document.getElementById("bookmark-open");
  const Close = document.getElementById("bookmark-close");

  // 북마크 바 열기 및 닫기
  const bookmarkBarToggle = () => {
    const isBookMarkBarOpen = localStorage.getItem("isBookMarkBarOpen");
    if (isBookMarkBarOpen) {
      if (isBookMarkBarOpen === "open") {
        localStorage.setItem("isBookMarkBarOpen", "close");
        bookMarkBar.style.display = "none";
        Open.style.display = "none";
        Close.style.display = "flex";
      } else {
        localStorage.setItem("isBookMarkBarOpen", "open");
        bookMarkBar.style.display = "block";
        Open.style.display = "flex";
        Close.style.display = "none";
      }
    } else {
      localStorage.setItem("isBookMarkBarOpen", "close");
      bookMarkBar.style.display = "none";
      Open.style.display = "none";
      Close.style.display = "flex";
    }
  };

  document
    .getElementById("bookmark-open-btn")
    .addEventListener("click", bookmarkBarToggle);
  document
    .getElementById("bookmark-close-btn")
    .addEventListener("click", bookmarkBarToggle);
})()
캡처.PNG.webp

저 부분 있는거 아닌가요?

변수명을 효빈 강사님이랑 동일하게 하지 않았습니다!

아니면 아예 완전 똑같이 한 다음에 다시 봐야할지,,,,

일단 시도는 해보겠습니다!

 

+그리고 마지막 챕터 강의에서 크롬 엑스텐션 추가하는게 안되네요ㅠ

구글 > 'chrome://extensions/' 검색 > '압축해제된 확장 프로그램 로드' 클릭 > 전체 확장 프로그램 항목에 들어가있는거 확인

까지 했는데 크롬에서 새탭 들어가도 기존에 있는 테마랑 동일하게 나와서요ㅠㅠ

gg.PNG.webp

 

 

0

hyobin

표시해주신 부분은, bookmarkBarToggle 함수 내부에 있는 코드로, 해당 함수가 호출 될 때에만 실행이 되는 코드입니다 🙂

제가 말씀드린 부분은, 맨 처음 웹페이지에 접속했을 때 로컬 스토리지에 있는 값을 읽어오지 못하는 오류이기 때문에, 함수의 바깥에 제가 올려드린 코드를 작성해보시면 될 것 같습니다!!

코드를 다시 한 번 확인해주세요 :)


image.png

구글 > 'chrome://extensions/' 검색 > '압축해제된 확장 프로그램 로드' 클릭 > 전체 확장 프로그램 항목에 들어가있는거 확인까지 하셨다면, 새로운 크롬탭을 열 때 다음과 같은 alert가 나옵니다. 이 때 유지 버튼을 눌러보시면 알맞게 작동할겁니다!!

마찬가지로, 강의에 있는 mainfest.json 코드 및 파일 위치를 다시 한 번 확인해보시고 말씀해주세요! 감사합니다 😀

1

gjwjsgksskf9539

bookmarkBarToggle 관련 오류는 해결했습니다.

강의 다시 처음부터 들으면서 작성해봤더니 되네요ㅠㅠ

+

어제 저 alert창도 유지로 했는데도 안바뀝니다...ㅠ

애초에 저 alert창도 바로 안뜨고 확장프로그램 화면에서 어찌저찌(?) 하니까 뜨더라구요..ㅠ 방금도 제 파일 삭제 후 다시 로드했더니 역시나 저 alert창이 안뜨네요..

단순 제 PC 크롬 시스템 문제인걸까요..?

 

1

gjwjsgksskf9539

바쁘신 와중에도 답글 계속 달아주시고 ㅠㅠ 감사합니다 ㅠㅠㅠ

Adblock 이라는 광고 차단 프로그램이 막고 있는건지 해서 이것도 삭제해봤는데

역시나 새 탭 들어가도 얼럿창이 안뜨네요..ㅎㅎ;;

일단 이 문제는 계속 저도 봐보겠습니다... ㅠ

0

hyobin

앗 그러시군요...ㅠㅜ 혹시 지금은 해결 되셨을까요??
저도 찾아보고 최대한 빠르게 해결법을 알려드리겠습니다 🥲🥲

브라우져 호환성 문의

0

67

2

4-23 Promise객체 12:05 코드 질문

0

60

2

<div class="bookmark-item-add-btn"> 질문

0

58

2

랜덤이미지

0

60

2

"6. 1. (최신 버전) 자바스크립트 코딩 환경 설정"의 화면이 정상적으로 출력되지 않습니다

1

72

2

홈페이지 이미지 추가 방법 문의드립니다!

0

115

2

북마크 추가 버튼 활성화 오류 문의드립니다!

0

113

1

북마크바 배치 문의드립니다!

0

114

2

명언 설정하는데 위치설정 오류가 있어요!

0

143

2

4:45 부터 무한로딩되어 재생이 안됩니다ㅠ

1

105

1

BigInt Type 에 대하여

0

87

1

계속 헷갈리네요. 이게 맞나요?

1

149

2

섹션 7 - 7 프로젝트 적용하기

1

121

2

섹션7 - 7 프로젝트 적용하기

0

88

1

섹션7-4 api사용해서 명언 설정하기

0

135

2

6분 53초 질문입니당

1

119

2

왜 전부다 div태그로 만드는지 궁금합니다.

1

232

2

[수업질문] bookmark.js에서

0

130

2

최종 프로젝트 적용

0

181

2

append&appendChild+메소드 호출

1

138

1

코드샌드박스 업데이트

0

168

2

async pending상태의 promise객체

1

151

2

화면이 다릅니다.

1

178

1

extensions 질문

1

1296

1