- Published on
✨ 바닐라 JS 크롬 앱 만들기 #3 강의 정리
- 글쓴이
📌 목차
💁🏻
- INTRODUCTION
- WELCOME TO JAVASCRIPT
- JAVASCRIPT ON THE BROWSER
- LOGIN
- CLOCK
- QUOTES AND BACKGROUND
- TO DO LIST
- WEATHER
JavaScript on the browser
3.0 The Document Object
JavaScript
가 어떻게 브라우저를 움직이는지 알아볼거야. 그러기 위해서는
JavaScript
와 Html
이 어떻게 상호작용하는지 알아봐야해
모든 것들은 document
로 부터 시작해!
document
는 여러분의 web site를 의미하거든.
document
는 Html
의 내용을 Javascript
의 관점으로 보여줘.
document.title = "Momentum"
HTML
은 접착제 같은 것. HTML
이 CSS
와 JavaScript
를 가져오지.
우리는 JavaScript
가 HTML
에 이미 연결 돼 있다는 것을 배웠어.
JavaScript
는 여러분의 HTML
에 접근하고 읽을 수 있어.
그리고 HTML
의 Element
들을 JavaScript
를 통해 변경할 수도 있어.
이 부분은
HTML
,JS
의 연결을 이해하는 아주 중요한 부분이지만
처음 노마드 코더 챕터 3수업으로 들었을 때는 이해하기가 아주 어려웠다.
>HTML
,JS
,브라우저의 작동 방식을 이해하는 데는 드림코딩 앨리님의 유투브를 먼저 듣고
이해하는 것이 확실히 도움이 되었다.
나같은 초보자라면 먼저 드림코딩 강의 듣고오는 것을 추천.
3.1 HTML in JavaScript
console
에서
document.getElementById("title")
로
JavaScript로 id
가 title
인 <h1>
태그를 가져왔어.
이걸 App.js
에서 가져오게하려면
js
파일에
const title = document.getElementById('title')
라고 써야해.
그리고, h1.title
하나에서 엄청 많은 값을 읽어올 수 있어.
이 모든 것들은 HTML에서 표현될 수 있는거야.
여기서 JavaScript가 HTML의 element
를 가져와서 브라우저에서 보여주는 이 연결이 아주 중요한거야.
우리는 HTML에서 element
들을 가지고 와서, JavaScript를 통해 element
들을 변경할거야.
3.2 Searching For Elements
querySelector
과 querySelectorAll
을 쓰는게 좋다.
querySelector
는 element
를 CSS방식
으로 검색할 수 있어.
예를 들면 h1같은걸 가져올 수 있지.
const title = document.querySelector(".hello h1");
querySelector
을 쓸 때는 hello가 class name
이라는 것과 그 안의 h1
을 명시해줘야 해.
그리고 querySelector
은 해당되는 elements
중 첫번째만 가져오니까
다 가져오고 싶으면 querySelectorAll
을 써야해.
3.3~5 Events
element
의 내부를 보고 싶다면
console.log
대신 console.dir
를 사용하면 돼.
우리가 JavaScript에서 대부분 작업할 일은, Event를 listen하는 거야.
첫번째로 click
을 listen해보자..!
먼저 title
에 eventListener
을 추가할거야
eventListener
은 말그대로 Event를 listen하는거야.
하지만 Javascript에 무슨 Event를 listen하고 싶은지 알려줘야 해
const title = document.querySelector('div.hello:first-child h1')
function handleTitleClick() {
console.log('title was clicked!')
title.style.color = 'blue'
}
title.addEventListener('click', handleTitleClick)
querySelector
로title element
를 찾고addEventListener
에서 click event를 listen하도록 하고,- click event가 발생하면, 두번째 인수(
argument
)인handleTitleClick function
이 실행되는거야
listen하고 싶은 event를 찾는 가장 좋은 방법은
구글에 찾고 싶은 element
의 이름, 예를들어 h1 html element mdn
을 검색하는거야.
우리는 JavaScript의 element
를 원하니, 링크에 Web APIs라는 문장이 포함된 페이지를 찾아. 왜냐면 이건 JS관점의 HTML Heading Element란 의미야.
console.dir
을 입력해서 찾은 property
중에 on이 붙은 것도 다 Event야.
쓸때는 on을 떼고 쓰면 돼
title.addEventListener('mouseenter', handleMouseEnter)
title.addEventListener('mouseleave', handleMouseLeave)
title.onclick = handleMouseEnter;
title.addEventListener(“mouseenter” , handleMouseEnter);
위에 두 코드는 동일하나 addEventListener
를 선호하는 이유는
removeEventListener
을 통해서 event listener을 제거할 수 있기 때문!
document
에서 body,head,title
은 중요해서 언제든
document.body
로 가져올수있지만
div나 h1 등 element 들은 querySelector / getElementById 같은걸로 찾아야 해.
document.querySelector(“h1”)
3.6~8 CSS in JS
JavaScript는 HTML을 변경할거고 CSS는 HTML을 바라보고 있지.
const h1 = document.querySelector("div.hello:first-child h1");
function handleTitleClick() {
if (h1.className === "active") {
h1.className = "";
} else {
h1.className = "active";
}
h1.addEventListener("click", handleTitleClick);
===
는 값과 타입이 일치하는지 비교하는 거고
=
는 뒤에 오는 값을 앞에 써진 값에 할당하는거야.
raw string
대신 const
를 지정해주자.
className
을 덮어쓰지 않고 css
를 추가하고 싶다.
우리가 해줘야 하는건, Javascript로 모든 classname을 변경하지 않는거야
toggle
toggle
은 h1
의 classList
에 clicked class가 이미 있는지 확인해서
만약 있다면, toggle
이 clicked를 제거해주고
만약 없다면, clicked를 classList
에 추가해줄거야.
const h1 = document.querySelector('div.hello:first-child h1')
function handleTitleClick() {
const clickedClass = 'clicked'
if (h1.classList.contains(clickedClass)) {
h1.classList.remove(clickedClass)
} else {
h1.classList.add(clickedClass)
}
}
//위의 긴 함수를 toggle을 사용하면 밑에처럼 한줄로 줄일 수 있어. 짱이야~
function handleTitleClick() {
h1.classList.toggle('clicked')
}
h1.addEventListener('click', handleTitleClick)